Tartalomjegyzék

< Számítástechnika

DTD

Blokkok létrehozása az XML dokumentumban

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>

Tulajdonságok

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.

Entitások (Egyedek)

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 „&nbsp;”. Ez egy nem törhető szóközt jelöl.

Az XML-ben ezek előre definiáltak:

Entitás Jelentés
&lt; <
&gt; >
&amp; &
&quot;
&apos; '

PCDATA

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: &lt; és &gt;

CDATA

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.

DTD elemek

A DTD elemeket ELEMENT deklarációval adunk meg.

Elemek deklarálása

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 elemek

Üres elemeket az EMPTY kategóriával adunk meg.

<!ELEMENT elem-neve EMPTY>

Például: <!ELEMENT br EMPTY>

XML példa:

<br />

Az elemek és a Parsed Character Data

A Parsed Character Data, elemzett karakteres adatokat jelent. Elemzett mert figyeli, hogy van-e például &lt; 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)>

Elemek valamilyen tartalommal

Az ilyen elemet ANY kategória leíróval adjuk meg.

<!ELEMENT elem-neve ANY>

Példa:

<!ELEMENT jegyzet ANY>

Az elemek gyermekei (sorozat)

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)>

Csak egy gyermekelem megadása

<!ELEMENT elem-neve (gyermek-neve)>

Példa:

<!ELEMENT jegyzet (üzenet)>

Az üzenet gyermekelem csak egyszer szerepelhet a jegyzet elemben belül.

Egy elem minimum egyszer vagy többször

<!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.

Egy elem nullaszor vagy többször

<!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.

Egy elem nullaszor vagy egyszer

<!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.

Mindkettő/vagy megadása

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.

Kevert tartalom megadása

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

Tulajdonságok vagy attribútumok meghatározása

Tulajdonság deklaráció

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ó

Az alapértelmezett tulajdonság értéke

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.

#REQUIRED

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.

#IMPLIED

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.

#FIXED

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.

Felsorolt tulajdonság értékek

Szintaktika

<!ATTLIST elem-neve tulajdonság-neve (en1|en2|..) alapértelmezett-érték>

Példa

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.

Tulajdonság vagy elem használata

Kérdés

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></neme>
  <keresztnev>Anna</keresztenev>
  <vezeteknev>Nagy</vezeteknev>
</szemely>

A legjobb út

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.

Tulajdonság használata

<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>

Második példa

<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>

Legjobb példa

<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>

Entitások használata

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.

Belső entitás deklaráció

Szintaktika

<!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ő (;)

Külső entitás deklaráció

Szintaktika

<!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>