Alapvető XML szabályok: jól formált vs. érvényes (valid) XML

Az XML dokumentumok építőelemei

Elemek

Egy XML dokumentumban az adatok elemek között szerepelnek. Az elemek kezdőcímkével és zárócímkével rendelkeznek. A kezdő- és zárócímkéknek saját neveik vannak – például „PersonName” –, illetve a címkét a tárolt adatoktól csúcsos zárójelek határolják el. A nyitócímke kezdetét a nyitójel (<), a végét pedig a zárójel (>) jelzi.

A zárócímke „</” nyitójellel és „>” zárójellel rendelkezik. A következő példa egy személynevet leíró XML elemet mutat be. Az elem tartalma, vagy XML nyelven PCDATA (Parsed Character Data), esetünkben „Clark Kent” jelenik meg a kezdő- és zárócímkék között:

1
<PersonName>Clark Kent</PersonName>

Különleges esetek az úgynevezett üres elemek. Az üres elemek nem tartalmaznak PCDATA-t, és a címke egyszerre funkcionál nyitó- és zárócímkeként. Ezeket az elemeket jellemzően elválasztó elemként (milestone) használják. Ehhez igen hasonló az XHTML-ben előforduló <br/>, amely sortörést jelöl. Ez a struktúra gyakran szükséges ahhoz, hogy a forrásszövegben lévő szünetek előfordulási helyét jelöljük (például egy könyvben vagy cikkben lévő oldal- vagy szakasztörést).

A <PersonName> elemünk példájában az elemnév karakterek sorozata. Az XML elemnevek szabálya alapján a neveknek betűvel vagy aláhúzással kell kezdődniük, tartalmazhatnak betűt, számjegyet, kötőjelet, aláhúzást, pontot, továbbá kis-és nagybetű érzékenyek. Az alábbi táblázat az érvényes XML nevek példáit mutatja:

Szabályos XML elemnevek

<_newElement> </newElement>

Az elemnévnek betűvel vagy aláhúzással kell kezdődnie.

<newElement> </newElement>

Az elemnevek kis- és nagybetű érzékenyek, továbbá a kezdő- és zárócímkének egymáshoz illőnek kell lennie.

<my.new_Element-1></my.new_Element-1>

Az elemnevek tartalmazhatnak betűt, számjegyet, kötőjelet, aláhúzást és pontot is.

A nem megfelelő módon elnevezett elemek miatt az XML adat elveszti jól formáltságát, feldolgozásra alkalmatlanná válik, amelyről hibaüzenetet is küld az XML feldolgozó szoftver. Az alábbi táblázat a helytelen elnevezési módokat sorolja fel:

Nem megfelelő XML elemnevek

<1Element> </1Element>

Az elemnév nem kezdődhet számjeggyel, kötőjellel vagy ponttal.

< Element /> </ Element>

Az elemnév nem kezdődhet szóközzel.

<newElement> </Newelement>

Az elemnevek kis-és nagybetű érzékenyek, a kezdő- és zárócímkének pedig egymáshoz illőnek kell lennie.

<xmlElement></xmlElement>

Az elemnév nem kezdődhet a következő szavakkal: xml, XML, Xml, stb.

<new Element> </new Element>

Az elemnév nem tartalmazhat szóközt.

Attribútumok

Az XML dokumentumok másik építőköve az attribútum. Az attribútumok lehetővé teszik, hogy további információkat adjunk hozzá az XML elemhez. Ez a plusz információ módosíthatja, finomíthatja vagy tovább pontosíthatja az adott elemet. Ha az elemekre főnévként gondolunk, akkor az attribútumok a melléknevekhez hasonlíthatók. A kezdőcímkében, az elemnév után, szóközzel elválasztva szerepel az attribútum. A következő példában a @first-name (keresztnév) és a @last-name (vezetéknév) attribútumok vannak hozzáadva a személyt jelölő XML elemhez:

<person first-name=”Henry” last-name=”James” />

Az attribútumok felhasználhatók adatok tárolására is, de esetenként nehéz eldönteni, hogy az adatokat attribútumértékként vagy egy elemen belül tároljuk-e. Az elemen belüli tárolás előnye, hogy az adatokat tovább lehet strukturálni más XML elemek vagy attribútumok beágyazásával. Ez attribútumértékekkel nem hajtható végre. Az attribútumok előnye, hogy hasznosak lehetnek egy elem és tartalmának további leírásához, sémákkal pedig az attribútumértékként tárolt adatok speciális adattípusokra és értékekre korlátozhatók.

Az attribútumokra hasonló elnevezési szabályok vonatkoznak, mint az elemekre. A neveknek betűvel vagy aláhúzással kell kezdődnie, tartalmazhatnak betűt, számjegyet, kötőjelet, aláhúzást és pontot, de szóközt nem. Az attribútumértékeket idézőjelbe kell tenni, tartalmazhatnak alfanumerikus karaktereket, szóközt és más egyéb karaktereket, például pontot, kötőjelet, aláhúzást, vesszőt, stb. Azonban óvatosnak kell lenni a szimpla és a dupla idézőjelek használatával. Ha szimpla idézőjelben van az attribútumérték, akkor magában az értékben már nem szerepelhet ilyen idézőjel. Ugyanez érvényes a dupla idézőjelben szereplő attribútumértékre is. A következő táblázat az attribútumok megfelelő használatát tartalmazza:

Az attribútumok érvényes használata XML-ben

<newElement attribute1=”attribútumérték: 1” />

Az attribútumnév tartalmazhat számjegyeket, de nem kezdődhet számmal. Az attribútumérték tartalmazhat szóközt, írásjelet és alfanumerikus karaktereket bármilyen sorrendben.

<person name=’Rob Miller’ />

<person name=”Rob Miller” />

Szimpla és dupla idézőjel is határolhatja az attribútumértéket.

<address owner=”Mary's address” />

Szerepelhet szimpla idézőjel az attribútumértékben, de nem határolóelemként.

<sentence spoken=’He said: “go”!’ />

Dupla idézőjel is szerepelhet az attribútumértékben, de nem határolóelemként.


Az XML adat elveszti jól formáltságát a helytelen attribútum-szintaxistól. Az XML feldolgozó szoftver nem képes kezelni a rosszul formált attribútumot és hibaüzenettel jelzi azt. A következő táblázat a rosszul formált attribútumneveket és értékeket tartalmazza:

Az attribútumnevek- és értékek nem megfelelő használata az XML-ben

<person name=Robert />

Az attribútumértéket idézőjelbe kell tenni.

<person name=”Robert’ />

Mindkét idézőjelnek azonosnak kell lennie.

<sentence spoken=”He said: “go”!” />

Ha dupla idézőjel határolja az attribútumértéket, magában az értékben már nem szerepelhet.

<address owner=’Mary’s address’ />

Ha szimpla idézőjel határolja az attribútumértéket, magában az értékben már nem szerepelhet.

<person first name=”Frank” />

Az attribútumnév nem tartalmazhat szóközt.

<person 1stname=”Robert” />

Az attribútumnévnek betűvel vagy aláhúzással kell kezdődnie.

<person name=”Robert” name=”James” />

Egy elemnek nem lehet két attribútuma azonos névvel.


Az elemek és az attribútumok az XML építőkövei, elengedhetetlenek az adatok strukturálásához és modellezéséhez. További fontos összetevők az XML dokumentumokban a feldolgozási utasítások, az XML és az Unicode entitások.


Feldolgozási utasítások

A feldolgozási utasítások tartalmazzák az XML feldolgozó instrukcióit, amelyek meghatározzák, hogy melyik XML verziót és milyen karakterkódolást és/vagy sémát kell egy érvényes XML dokumentumhoz használni. A feldolgozási utasítások könnyen felismerhetők, az XML dokumentum első soraiban szerepelnek. Egy feldolgozási utasításnak nincs kezdő- és zárócímkéje , azonban rendelkeznek olyan attribútumokkal, amelyek információt tárolnak. A következő feldolgozási utasítás például az XML deklaráció, aminek minden XML dokumentum elején szerepelnie kell. Meghatározza, hogy az adott dokumentumot az XML szabvány szerint kódolják, az XML 1.0-s verziójával és UTF-8 karakterkódolással:

1
<?xml version="1.0" encoding="UTF-8"?>

Unicode entitások

Az XML elemben tárolt szöveg általában PCDATA (Parsed Character Data). Ezt az adatmeghatározást használják az XML dokumentumokban, amely egyben meghatározza azt az öt karaktert is, amelyek megkülönböztetik a jelölést az adattól, mint például a csúcsos zárójelek (elemeknél), szimpla és dupla idézőjel (attribútumoknál), valamint az „és” jel (&) (elnevezett entitásoknál); ezeket fel lehet oldani entitásra való hivatkozásokkal. Az entitásra való hivatkozások „&” jellel kezdődnek és pontosvesszővel végződnek. A következő lista azt mutatja be, hogy milyen entitásokat kell használni az öt karakter helyett:

Karakter

XML entitás

< 

&lt;

> 

&gt;

&

&amp;

'

&apos;

"

&quote;

 

Az entitásra való hivatkozás egy másik formája a karakterre való hivatkozás, azon karakterek vagy szimbólumok esetében, amelyeket nem tartalmaz az ASCII karakterkészlet. Az Unicode karakterhivatkozások például használhatók az XML dokumentumokban. Az ilyen típusú hivatkozások „&#" karakterkettőssel kezdődnek és pontosvesszővel végződnek, valamint közvetlenül beágyazódnak egy XML dokumentumba. Például a görög Pi (Ππ) a következő karakterhivatkozással rendelkezik: &#x03A0;