330 likes | 470 Views
Extensible Markup Language. XML validálás. Hernyák Zoltán http://aries.ektf.hu/~hz hz@aries.ektf.hu. XML validálás. Az XML alapkövetelménye a jól formázottság Ha nem jól formázott, a feldolgozó szoftver be sem olvassa Ha jól formázott, még nem biztos hogy olyan a szerkezete,
E N D
Extensible Markup Language XML validálás Hernyák Zoltán http://aries.ektf.hu/~hz hz@aries.ektf.hu
XML validálás Az XML alapkövetelménye a jól formázottság Ha nem jól formázott, a feldolgozó szoftver be sem olvassa Ha jól formázott, még nem biztos hogy olyan a szerkezete, mint amilyet várunk A szerkezet persze betölthető, és ha nem feldolgozható, akkor a feldolgozó szoftver hibát jelezhet ki De egyszerűbb ha egy szabályrendszerrel írjuk elő a szerkezeti elvárásainkat A szabályrendszert a kliens is át tudja venni, és ellenőrízni tudja, hogy amit előállít, az megfelelő-e a nélkül, hogy a feldolgozó szoftverrel ténylegesen rendelkezne Így univerzális szerkezet-ellenőrző program írható, amelynek két paramétere van - egy konkrét xml file - egy szerkezet-leíró file (szintén xml formájú)
XML DTD DTD – Document Type Definition Szabályok gyűjteménye Megadja hogy kell az XML-nek megírva lennie XML struktúrát ír le (Jellemzően) külső file-ban tároljuk A benne szereplő szabályokat összevetjük egy konkrét XML dokumentummal Ezt végzi az XML PARSER jellegű program Ha az XML dokumentum megfelel a szabályoknak, azt mondjuk rá: VALID Egy XML dokumentumot a parser csak akkor tud ellenőrízni, ha jól formázott (well-formed)
XML – belső DTD A DTD leírást beszúrhatjuk az XML file belsejébe
XML – külső DTD Vagy csatolhatjuk külső file-ként is:
XML DTD DTD elem alakja:
XML DTD Belső DTD leírás: <!DOCTYPE root [ … ]> Külső privát DTD file: <!DOCTYPE root SYSTEM <url> > <!DOCTYPE root SYSTEM ”c:\person.dtd”> Külső publikus DTD file: <!DOCTYPE root PUBLIC <név> <uri> > <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ”http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
XML DTD Publikus DTD esetén: név (részek // elválasztva): prefix (előtag) ISO: ISO elfogadott név +: elfogadott, de nem ISO szabvány -: nem elfogadott, nem ISO szabvány a DTD tulajdonosa a DTD leírása ISO 639 nyelvi leírás uri: a DTD elérési útja, ha név alapján nem azonosítható <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ”http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd” >
XML DTD – entitás definíció Entitás: név-érték páros Az entitás értékére nevével lehet hivatkozni &név; formában.
XML DTD – külső entitás definíció Az entitás értékét külső fileban is lehet tárolni:
XML DTD – NDATA külső entitás definíció Nem elemzett külső entitás-tartalom:
XML DTD – paraméter entitás Egy általános entitás nem használhtó a DTD definícióban, csak az XML-ben magában A paraméter entitás csak a DTD belsejében használható A paraméter entitás deklarációjában a % jel fel van tüntetve Ezt külső file-ban kell tartani!
XML DTD - elemleírás Elemleírás: name: az elem neve content-model: EMPTY: üres, nem lehet tartalma ANY: bármi lehet PCDATA: parsed character data (feldolgozott text) vagyis tartalmazhat gyerek-elemeket CDATA: plain text, szimpla szöveg, nem tartalmazhat gyerek elemeket <gyerek elem definíciók>
XML DTD - elemleírás HTML <br/> elem leírása: <!ELEMENT br EMPTY> <br /> Konkrét gyerek elemek felsorolása (ebben a sorrendben): <!ELEMENT person (name,sex,address) > <person> <name>…</name> <sex>…</sex> <address>…</address> </person>
XML DTD - elemleírás Pontosan egy előfordulás: <!ELEMENT person (name,sex,address) > <!ELEMENT person (name, sex, address?) > Előfordulhat (vagy 0 vagy 1 előfordulás): Legalább egy (vagy 1 vagy több előfordulás): <!ELEMENT person (name, sex, phone+) > Tetszőleges sok (vagy 0, vagy 1, vagy több előfordulás): <!ELEMENT person (name, sex, child*) >
XML DTD - elemleírás Vagy ez vagy az: <!ELEMENT person (name,sex,(email|phone)) > <!ELEMENT person (#PCDATA, name, sex) > Óvatosan kezeljük a * és egyéb karakterekkel: <!ELEMENT person (name,sex, (email|phone)* ) > Kevert tartalom: Komplex példa:
XML DTD – attribútum-leírás Attribútum-leírás: Általánosan:
XML DTD – attribútum-leírás !ATTLIST elem neve: a tartalmazó elem neve attribútum neve: az attribútum neve attribútum értéke: mi lehet a tartalma? flag: kötelező / lehetséges / …
XML DTD – attribútum-leírás • Attribútum értéke lehet: • CDATA: tetszőleges string • Felsorolás: megadjuk a lehetésges értékeket • NMTOKEN: (name token) az érték első betűje spec kar lehet csak • NMTOKENS: felsorolás (white-space elválasztóval) • ID: az érték egyedi kell legyen ezen XML-en belül • IDREF: hivatkozás egy ID elemre (értékével) • IDREFS: felsorolás • ENTITY: egy entitás neve (lásd !ENTITY definiálás) • ENTITIES: entitás-nevek felsorolása • Attribútum flag lehet: • #REQUIRED: kötelező megadni • #IMPLIED: opcionális attribútum • #FIXED: az értéket nem lehet megváltoztatni
XML DTD – ID példa • ID: • ilyenből elemenként csak egy lehet • csak #IMPLIED vagy #REQUIRED lehet • az érték első karaktere betű, aláhúzás, vagy kettőspont lehet • további karakterek: a..z, A..Z, 0..9, _, -, : • az értéke egyedi kell legyen az XML dokumentumban
XML DTD – IDREF példa • IDREF: • csakis olyan értéke lehet, amely ID-ként szerepel valahol
XML DTD – ATTLIST felsorolás • vagy kiírjuk minden attribútum definíciónál az elem nevét is • vagy adott elemnévhez soroljuk fel az attribútumokat
XML DTD – NMTOKEN (name token) • NMTOKEN: • a tartalma akár xml tag név is lehetne • névképzési szabályoknak meg kell felelnie • a..z, A..Z, 0..9, _, -, : • stb
XML DTD – alapértelmezett érték • alapértelmezett: • a status értéke csak normal vagy important lehet • ha nincs kitöltve, akkor olyan, mintha normal lenne írva
XML DTD – fixed alapértelmezett érték Kitölteni sem érdemes, kötelezően ”monthly” értékű
XML DTD – ENITIÁSOK • NMTOKEN: • a tartalma akár xml tag név is lehetne • névképzési szabályoknak meg kell felelnie • a..z, A..Z, 0..9, _, -, : • stb
XML DTD – feldolgozási utasítás • Feldolgozási utasítás • Tartalma „bármi” lehet • A megnyitó alkalmazásnak szól
XML DTD – NOTATION megjegyzés • NOTATION: • nem feldolgozott tartalom típusát írja le
XML DTD – feladat • FELADAT: • készítsünk DTD-d az alábbi XML file-hoz • csak elemek vannak benne • útvonal: • FELADAT: • készítsünk DTD-d az alábbi XML file-hoz • attribútumok is vannak benne: • útvonal: