A következő jelölőkből épülhet fel egy XML dokumentum:
A HTML nyelvben elemekre példa a „body” és az „img”. Egy XML dokumentumban például „megjegyzés” „üzenet”, stb. Az elemek tartalmazhatnak szöveget, vagy újabb elemeket, de maradhatnak üresen is. Üres elemek a HTML nyelvben például a következők: „hr”, „br” és az „img”.
Például:
<body>szöveg</body>
<üzenet>szöveg</üzebnet>
A tulajdonságok, másként attribútumok az elemekről még több információt adnak számunkra.
A tulajdonságot mindig egy elemen belül hozunk létre, és mindig név és érték párokból épül fel.
<img src="kep.jpg" />
A példában az elem neve az „img”. Az tulajdonság az „src”. A tulajdonság értéke „kep.jpg”. A végén az elem önmagát zárja, mivel üres elem.
Néhány karakternek speciális jelentése van az XML-ben, olyanok mint a (<). Ez a karakter például egy tag kezdetét határozza meg.
A HTML is tartalmaz ilyen egyedeket (entitás), például a „ ”. Ez egy nem törhető szóközt jelöl.
Az XML-ben ezek előre definiáltak:
Entitás | Jelentés |
---|---|
< | < |
> | > |
& | & |
" | „ |
' | ' |
A PCDATA jelentése elemzett karakteres adat (parsed character data).
Egy nyitó és egy záró elem közzé tesszük tartalomként. Az PCDATA egy olyan szöveg amely elemezhető szöveget tartalmazhat. A szöveg különböző entitásokat tartalmazhat.
Az entitásokat & vezeti be a szövegben. Így ez nem szerepelhet önálló karakterként. De ilyen a <, > karakterek is. Helyettük: < és >
A CDATA jelentése karakteres adat (character data).
Nem tartalmaz elemzett részeket, nincsenek benne jelölök. Mindent úgy értelmezünk, ahogy az meg van adva.
A DTD elemeket ELEMENT deklarációval adunk meg.
Egy DTD-ben az XML elemek megadása a következő szintaxis szerint történik:
<!ELEMENT elem-neve kategória>
vagy
<!ELEMENT elem-neve (elem-tartalma)>
Üres elemeket az EMPTY kategóriával adunk meg.
<!ELEMENT elem-neve EMPTY>
Például: <!ELEMENT br EMPTY>
XML példa:
<br />
A Parsed Character Data, elemzett karakteres adatokat jelent. Elemzett mert figyeli, hogy van-e például < karaktersorozat a tartalomban, mert ezt másként értelmezi.
Az elemzett karakteres adatokat a #PCDATA segítségével adunk meg:
<!ELEMENT elem-neve (#PCDATA)>
Példa:
<!ELEMENT from (#PCDATA)>
Az ilyen elemet ANY kategória leíróval adjuk meg.
<!ELEMENT elem-neve ANY>
Példa:
<!ELEMENT jegyzet ANY>
Az elemek egy vagy több újabb gyermekelemet is tartalmazhatnak.
<!ELEMENT elem-neve (gyermek1)>
vagy
<!ELEMENT elem-neve (gyermek1,gyermek2,...)>
Példa:
<!ELEMENT jegyzet (kezdes,vége,fejrész,lábrész)>
Ha a gyermekelem vesszővel van szeparálva, akkor azokat ugyanilyen sorrendben kötelező megadni.
<!ELEMENT jegyzet (kezdes,vége,fejrész,törzsrész)> <!ELEMENT kezdés (#PCDATA)> <!ELEMENT vége (#PCDATA)> <!ELEMENT fejrész (#PCDATA)> <!ELEMENT törzsrész (#PCDATA)>
<!ELEMENT elem-neve (gyermek-neve)>
Példa:
<!ELEMENT jegyzet (üzenet)>
Az üzenet gyermekelem csak egyszer szerepelhet a jegyzet elemben belül.
<!ELEMENT elem-neve (gyermek-neve+)>
Példa:
<!ELEMENT jegyzet (üzenet+)>
A + jel azt jelenti, az elem többször is szerepelhet a jegyzet elemen beül, de egyszer minimum kötelező szerepelnie.
<!ELEMENT elem-neve (gyermek-neve*)>
Példa:
<!ELEMENT jegyzet (üzenet*)>
A * azt jelenti, hogy az „üzenet” elem többször is szerepelhet a „jegyzet” elemen belül, de ha egyszer sem szerepel az sem baj.
<!ELEMENT element-name (child-name?)>
Example:
<!ELEMENT jegyzet (üzenet?)>
A ? karakter azt jelenti az „üzenet” gyermekelem vagy egyszer szerepelhet, vagy egyszer sem a „jegyzet” elemen belül.
Példa:
<!ELEMENT note (kezdes,vége,fej,(üzenet|törzs))>
A példában a „jegyzet” elemnek tartalmaznia kell egy „kezdes”, egy „vége”, egy fej elemet és végül vagy egy „üzenet” vagy egy „törzs” elem jön.
Példa:
<!ELEMENT jegyzet (#PCDATA|kezdet|vége|fej|üzenet)*>
A példában a „jegyzet” elem tartalmazhat nulla vagy több elemzett karaktert, „kezdet”, „vége”, „fej” vagy „üzenet” elemet.
Tulajdonságok vagy attribútumok meghatározása
Az tulajdonság deklarációnak a következő a szintaktikája:
<!ATTLIST elem-neve tulajdonság-neve tulajdonság-típusa alapértelmezett-érték>
DTD példa:
<!ATTLIST fizetés type CDATA "feladva">
XML példa:
<fizetés type="feladva" />
A tulajdonság típusa a következő egyike:
Típus | Leírás |
---|---|
CDATA | Az érték karakteres adat |
(en1|en2|..) | Az érték egy a felsorolt listából |
ID | Az érték egyediazonosító |
IDREF | Az érték egy másik elem azonosítója |
IDREFS | Az érték egy más azonosítók listája |
NMTOKEN | Az érték egy érvényes XML név |
NMTOKENS | Az érték érvényes XML nevek egy listája |
ENTITY | Az érték üres |
ENTITIES | Az érték egy egyedlista |
NOTATION | Az érték egy jelölés neve |
xml: | Az érték újradefiniált xml érték |
Az alapértelmezett érték egy a következők közül:
Érték | Értelmezés |
---|---|
#REQUIRED | A tulajdonság kötelező |
#IMPLIED | A tulajdonság nem kötelező |
#FIXED érték | A tulajdonság állandó |
DTD:
<!ELEMENT kocka EMPTY> <!ATTLIST kocka szélesség CDATA "0">
Érvényes XML:
<kocka szélesség="100" />
A példában egy kocka elemet definiálunk. A kocka elemnek egy „szélesség” tulajdonsága lehet, amely alapértlemezeten 0, de mi 100-as értéket adtunk neki meg.
Szintaktika
<!ATTLIST elem-neve tulajdonság-neve tulajdonság-típusa #REQUIRED>
Például:
DTD:
<!ATTLIST személy szám CDATA #REQUIRED>
Érvényes XML:
<személy szám="12343" />
Érvénytelen XML:
<személy />
Nincs alapértelmezett értékünk, de kötelező megadni a személy számát.
Szintaktika
<!ATTLIST elem-neve tulajdonság-neve tulajdonság-típusa #IMPLIED>
Példa
DTD:
<!ATTLIST kapcsolat fax CDATA #IMPLIED>
Érvényes XML:
<kapcsolat fax="555-667788" />
Érvényes XML:
<contact />
Akkor használjuk, ha nem akarjuk kötelezővé tenni a tulajdonság megadását, és alapértelmezett értékünk sincs.
Szintakitka
<!ATTLIST eleme-enve tulajdonság-neve tulajdonság-típusa #FIXED "érték">
Példa
DTD:
<!ATTLIST szoftver licence CDATA #FIXED "szabad">
Érvényes XML: <szoftver licence=„szabad” />
Érvénytelen XML: <szoftver licence=„kereskedelmi” /> Akkor használjuk, ha tulajdonság értékét állandóra szeretnénk beállítani, hogy a felhasználó ne változtathassa azt meg. Ha a használója mégis mást állít be, akkor az XML értelmező hibát fog jelezni.
<!ATTLIST elem-neve tulajdonság-neve (en1|en2|..) alapértelmezett-érték>
DTD:
<!ATTLIST fizetés típus (csekk|készpénz) "készpénz">
XML példa: <fizetés típus=„készpénz” /> vagy <fizetés típus=„csekk” /> Akkor használd ezt a tulajdonságot, amikor valamilyen adott értékeket vársz a felhasználótól.
Kérdéses lehet, hogy egy adatot gyermekelemként vagy tulajdonságként hozzunk létre.
<szemely neme="nő"> <keresztnev>Anna</keresztnev> <vezeteknev>Nagy</vezeteknev> </szemely>
<szemely> <neme>nő</neme> <keresztnev>Anna</keresztenev> <vezeteknev>Nagy</vezeteknev> </szemely>
A legjobb talán az adatokat gyermekelemekben tárolni.
A következőkben három XML dokumentumot látunk, amely ugyanazokat az információkat tárolják.
<note date="2011-10-03"> <to>Emese</to> <from>Jani</from> <heading>Emlékeztető</heading> <body>Ne feledkezz meg rólam a hétvégén!</body> </note>
<note> <date>2011-10-03</date> <to>Emese</to> <from>Jani</from> <heading>Emlékeztető</heading> <body>Ne feledkezz meg rólam a hétvégén!</body> </note>
<note> <date> <day>12</day> <month>11</month> <year>2002</year> </date> <to>Emese</to> <from>Jani</from> <heading>emlékeztető</heading> <body>Ne feledkezz meg rólam a hétvégén!</body> </note>
Az entitásokat változóként használjuk, amelyek gyorsbillentyűként szolgálnak szabványos szövegek vagy speciális karakterek beillesztésére.
Az entitást internal és external módon deklaráhatunk.
<!ENTITY entitás-neve "entitás-értéke">
Példa
DTD példa:
<!ENTITY szerzo „Salla András”> <!ENTITY cr „Copyright©”>
XML példa:
<tulajdonos>&cr;&szerzo;</tulajdonos>
Megjegyzés: Egy entitás három részből áll: egy ampersand (&), egy név, és egy pontosvessző (;)
<!ENTITY entitás-neve SYSTEM "URI/URL">
Példa
DTD példa:
<!ENTITY szerzo SYSTEM "https://szit.hu/entitasok.dtd"> <!ENTITY cr SYSTEM "https://szit.hu/entitasok.dtd">
XML példa:
<tulajdonso>&cr;&szerzo;</tulajdonos>