B u d a pe s t i Műs za k i E g ye t e mMé r é s t e c h n ik a é s In f o r má c ió s R e n d s ze r e k T a n s zé k
Az X M L S chema deklarációs nyelv oktatási s egédlet
Mészáros Tamás mes zaros @ mit.bme.hu
Budapes ti M űs zaki E gyetem M éréstechnika és Információs R ends zerek Tans zék A z XML S c h e ma d e k l a r á c ió s n ye l v
1
B u d a pe s t i Műs za k i E g ye t e mMé r é s t e c h n ik a é s In f o r má c ió s R e n d s ze r e k T a n s zé k
Az X M L S chema deklarációs rendszer • Az alap X M L s zabvány deklarációs rends zerének (D TD ) problémái: – – – –
nem X M L szintaxisú nem támogatja az X M L Névtér szabványt nincs igazi adattipizálás komplex deklarációk készítését gyengén támogatja
• M egoldás : X M L S chema s zabvány (W3C , 2001) – – – – –
X M L formátumú dokumentum gazdag típusválaszték új típusok létrehozási lehetősége új öröklési (egymásba ágyazhatósági) modellek X M L Névtér támogatás (kötelező használat)
A z XML S c h e ma d e k l a r á c ió s n ye l v
2
B u d a pe s t i Műs za k i E g ye t e mMé r é s t e c h n ik a é s In f o r má c ió s R e n d s ze r e k T a n s zé k
X M L Névterek • X M L Names paces – probléma: több deklaráció összekapcsolása esetén névütközés – megoldás: névterek, melyek egyértelműen azonosítják a címkék szemantikáját – formai újítás: a címkék ellátása névtér előtaggal (prefix) – prefix deklaráció külső erőforrás megadásával – tipikus használat: X S L, S chema deklarációk
• Az X M L Névterek alkalmazása – deklaráció: attribútum megadásával xmlns="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" – alkalmazás : alapértelmezett névtér vagy explicit jelölt névtér <xs:schema>...
A z XML S c h e ma d e k l a r á c ió s n ye l v
3
B u d a pe s t i Műs za k i E g ye t e mMé r é s t e c h n ik a é s In f o r má c ió s R e n d s ze r e k T a n s zé k
A S chema és a D TD viszonya (példa) D TD deklaráció
note (to, from, heading, body)> to (#PCDATA)> from (#PCDATA)> heading (#PCDATA)> body (#PCDATA)>
X M L dokumentum <note>
Juli Jani Reminder Don't forget me this weekend!
A z XML S c h e ma d e k l a r á c ió s n ye l v
S chema deklaráció <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSc hema"> <xs:element name="note"> <xs:complexType> <xs:sequence> <xs:element name="to" type="xs:string"/> <xs:element name="from" type="xs:string"/> <xs:element name="heading" type="xs:string"/> <xs:element name="body" type="xs:string"/>
4
B u d a pe s t i Műs za k i E g ye t e mMé r é s t e c h n ik a é s In f o r má c ió s R e n d s ze r e k T a n s zé k
E gy összetett S chema példa <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="purchaseOrder" type="PurchaseOrderType"/> <xsd:element name="comment" type="xsd:string"/> <xsd:complexType name="PurchaseOrderType"> <xsd:sequence> <xsd:element name="shipTo" type="USAddress"/> <xsd:element name="billTo" type="USAddress"/> <xsd:element ref="comment" minOccurs="0"/> <xsd:element name="items" type="Items"/> <xsd:attribute name="orderDate" type="xsd:date"/> <xsd:complexType name="USAddress"> <xsd:sequence> <xsd:element name="name" type="xsd:string"/> <xsd:element name="street" type="xsd:string"/> <xsd:element name="city" type="xsd:string"/> <xsd:element name="state" type="xsd:string"/> <xsd:element name="zip" type="xsd:decimal"/> <xsd:attribute name="country" type="xsd:NMTOKEN" fixed="US"/>
A z XML S c h e ma d e k l a r á c ió s n ye l v
<xsd:complexType name="Items"> <xsd:sequence> <xsd:element name="item" minOccurs="0" maxOccurs="unbounded"> <xsd:complexType> <xsd:sequence> <xsd:element name="productName" type="xsd:string"/> <xsd:element name="quantity"> <xsd:simpleType> <xsd:restriction base="xsd:positiveInteger"> <xsd:maxExclusive value="100"/> <xsd:element name="USPrice" type="xsd:decimal"/> <xsd:element ref="comment" minOccurs="0"/> <xsd:element name="shipDate" type="xsd:date" minOccurs="0"/> <xsd:attribute name="partNum" type="SKU" use="required"/> <xsd:simpleType name="SKU"> <xsd:restriction base="xsd:string"> <xsd:pattern value="\d{3}-[A-Z]{2}"/>
5
B u d a pe s t i Műs za k i E g ye t e mMé r é s t e c h n ik a é s In f o r má c ió s R e n d s ze r e k T a n s zé k
A S chema példa X M L dokumentuma
<shipTo country="US"> Alice Smith <street>123 Maple Street Mill Valley <state>CA 90952 Robert Smith <street>8 Oak Avenue Old Town <state>PA 95819 Hurry, my lawn is going wild! - <productName>Lawnmower 1 148.95 Confirm this is electric
- <productName>Baby Monitor 1 39.98 <shipDate>1999-05-21
A z XML S c h e ma d e k l a r á c ió s n ye l v
• a S chema deklaráció nem eredményez más X M L dokumentumot • az előny a dokumentum feldolgozásakor, ellenőrzésekor jelentkezik
6
B u d a pe s t i Műs za k i E g ye t e mMé r é s t e c h n ik a é s In f o r má c ió s R e n d s ze r e k T a n s zé k
A S chema deklarációs rendszer fogalmi alapjai • C él névtér (target namespace) – A deklarált nyelv névtere, amelynek a rés zei a megalkotott S chema dokumentum deklarációi (típus ok, elemek, attribútumok, stb.)
• M inős ített név (qualified name) – Azon nevek, amelyeket névtér segítségével értelmezünk. – Ilyenek pl. a minősítő előtaggal (prefix) ellátott nevek (xhtml:table). – A minősítés egyértelművé teszi, hogy a nevek milyen névtérhez tartoznak.
• X M L dokumentum példány (instance document) – a deklaráció alapján elkészített X M L dokumentum – a deklarációs cél- és az X M LS chema-instance névtérre támaszkodik
A z XML S c h e ma d e k l a r á c ió s n ye l v
7
B u d a pe s t i Műs za k i E g ye t e mMé r é s t e c h n ik a é s In f o r má c ió s R e n d s ze r e k T a n s zé k
A S chema deklaráció felépítése • X M L deklaráció
• S chema gyökérelem <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
• opcionális dokumentáció a teljes deklarációról <xsd:annotation> <xsd:documentation> ...
• deklarációk: elemek és attribútumok, típus ok, stb.
A z XML S c h e ma d e k l a r á c ió s n ye l v
8
B u d a pe s t i Műs za k i E g ye t e mMé r é s t e c h n ik a é s In f o r má c ió s R e n d s ze r e k T a n s zé k
A S chema és a deklarációs névterek • A S chema s zabványban rögzített címkék (a deklarációs nyelv elemei) az XMLSchema névtérben vannak rögzítve <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
• A S chema dokumentum deklarálja az általa leírt cél névteret: <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:po="http://www.example.com/PO1" xsd:targetNamespace="http://www.example.com/PO1">
• S chema deklaráció alapján létrehozott X M L dokumentumok a cél névtérre és az X M LS chema-ins tance névtérre hivatkozhatnak <po:purchaseOrder xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:po="http://www.example.com/PO1" orderDate="1999-12-01"> A z XML S c h e ma d e k l a r á c ió s n ye l v
9
B u d a pe s t i Műs za k i E g ye t e mMé r é s t e c h n ik a é s In f o r má c ió s R e n d s ze r e k T a n s zé k
Névterek, deklaráció és dokumentum példány S chemaInstance névtér xs i:
s chema, element, attribute, …
purchaseO rder, comment, …
schemaLocation, type
ha
de
ja
l ná sz ha
lja ná sz ha
sz ná lja
Alkalmazás cél névtér po:
kla rá lja ha sz ná lja
S chema névtér xs d:
S chema deklaráció
X M L dokumentum példány
<xsd:schema targetNamespace="http://www.example.com/PO1" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:po="http://www.example.com/PO1">
<po:purchaseOrder orderDate="1999-10-20" xmlns:xsi="http://www.w3.org/2001/XMLSchema-i xmlns:po="http://www.example.com/PO1" xsi:schemaLocation="http://www.example.com/PO
<xsd:element name="purchaseOrder" type="po:PurchaseOrderType" />
...
...
A z XML S c h e ma d e k l a r á c ió s n ye l v
10
B u d a pe s t i Műs za k i E g ye t e mMé r é s t e c h n ik a é s In f o r má c ió s R e n d s ze r e k T a n s zé k
Hivatkozás a S chema deklarációra • A S chema dokumentum a s aját névterét is has ználhatja: <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:po="http://www.example.com/PO1" xsd:targetNamespace="http://www.example.com/PO1" xsd:elementFormDefault="unqualified" xsd:attributeFormDefault="unqualified">
• A dokumentum példány megadja a névteret és a deklaráció elérés ét <po:purchaseOrder xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:po="http://www.example.com/PO1" xsi:schemaLocation="http://www.example.com/PO1 po1.xsd" orderDate="1999-12-01">
A z XML S c h e ma d e k l a r á c ió s n ye l v
11
B u d a pe s t i Műs za k i E g ye t e mMé r é s t e c h n ik a é s In f o r má c ió s R e n d s ze r e k T a n s zé k
S chema deklarációk • A S chema egy moduláris deklarációs rends zer (sok objektum-orientált koncepciót átvett) – egyszerűbb komponensekből (elemek, attribútumok) összetett komponensek építhetők – a beépített típusok szűkíthetők, bővíthetők – saját típusok is létrehozhatók
• A S chema a s truktúra mellett az adattípus okat is pontos an rögzíti – a tipizálást meghatározó egys zerű típusok és a lehetséges struktúrákat leíró összetett típusok deklarációja szétválik – (maga a szabvány is két elkülönített részt szentel ezeknek)
• G lobális és lokális deklarációk – közvetlenül a schema gyökérelem alatti, ún. globális deklarációk bárhol felhasználhatók, bármelyikük lehet gyökérelem az XM L példányokban – a globális deklarációk gyermekei a lokális deklarációk A z XML S c h e ma d e k l a r á c ió s n ye l v
12
B u d a pe s t i Műs za k i E g ye t e mMé r é s t e c h n ik a é s In f o r má c ió s R e n d s ze r e k T a n s zé k
E gyszerű típus ok deklarációja és származtatása • E gys zerű típus ok, amelyeknek nincs bels ő X M L struktúrája – atom – lista – unió
• A S chema nyelv s zámos beépített egys zerű (atom) típus s al rendelkezik string, integer, float, boolean, date, time, stb.
• Az egys zerű típusokból továbbiakat s zármaztathatunk s zűkítés s el • A lis ta (xs d:lis t) egys zerű típus s al rendelkező adatokat kapcs ol öss ze – vannak beépített lista típusok – az egys zerű típusok felhasználásával további típusok is deklarálhatók – a listákra többféle megkötés t is tehetünk (méret, minták, stb.)
• Az unió (xs d:union) egys zerű típusok egy halmaza, melynek elemei közül bármelyik szerepelhet a dokumentum példányban. • S peciális egyszerű típus : anyS impleType (nem s zármaztatható, s peciális es eteket kivéve kerülendő az alkalmazás a) A z XML S c h e ma d e k l a r á c ió s n ye l v
13
B u d a pe s t i Műs za k i E g ye t e mMé r é s t e c h n ik a é s In f o r má c ió s R e n d s ze r e k T a n s zé k
E gyszerű típusok deklarációja – példák <xsd:simpleType name="myInteger"> <xsd:restriction base="xsd:integer"> <xsd:minInclusive value="10000"/> <xsd:maxInclusive value="99999"/> <xsd:simpleType name="listOfMyIntType"> <xsd:list itemType="myInteger"/> <xsd:simpleType name="SKU"> <xsd:restriction base="xsd:string"> <xsd:pattern value="\d{3}-[A-Z]{2}"/> A z XML S c h e ma d e k l a r á c ió s n ye l v
14
B u d a pe s t i Műs za k i E g ye t e mMé r é s t e c h n ik a é s In f o r má c ió s R e n d s ze r e k T a n s zé k
Komplex típusok deklarációja • Komplex típus az, amelynek van beágyazott gyermek eleme vagy rendelkezik attribútummal. • Ö s s zetett típus ok létrehozhatók egys zerű típus okból – elemekhez attribútum hozzárendelésével (az elem tartalmának nem változik a típusa, de kapcsolódik hozzá egy attribútum) – elemek összekapcsolásával • s orozat (xsd:s equence) • elemekből álló struktúra (complexC ontent) • akár karakteres adatokkal vegyes en is („mixed” attribútum)
– üres vagy tetszőleges tartalom beágyazásával – más komplex típusok szűkítésével
A z XML S c h e ma d e k l a r á c ió s n ye l v
15
B u d a pe s t i Műs za k i E g ye t e mMé r é s t e c h n ik a é s In f o r má c ió s R e n d s ze r e k T a n s zé k
Komplex típus ok deklarációja – példa <xsd:element name="UKPrice"> <xsd:complexType> <xsd:simpleContent> <xsd:extension base="xsd:decimal"> <xsd:attribute name="currency" type="xsd:string"/>
A z XML S c h e ma d e k l a r á c ió s n ye l v
16
B u d a pe s t i Műs za k i E g ye t e mMé r é s t e c h n ik a é s In f o r má c ió s R e n d s ze r e k T a n s zé k
Típusok elnevezése és anonim típusok • Az általunk deklarált típusokhoz neveket rendelhetünk. • Az elemek a type attribútummal hivatkozhatnak a típus nevekre. • Lehetős égünk van anonim típus ok alkalmazására is (tipikus an az egyszer has ználatos deklarációk es etében) – ebben az esetben nincs type attribútum – a típusdeklaráció a felhasználási helyén található <xsd:element name="UKPrice"> <xsd:complexType> <xsd:simpleContent> ... A z XML S c h e ma d e k l a r á c ió s n ye l v
17
B u d a pe s t i Műs za k i E g ye t e mMé r é s t e c h n ik a é s In f o r má c ió s R e n d s ze r e k T a n s zé k
Típusdeklarációk módos ítói (facets) • xs d:whiteS pace – „üres” (tabulátor, soremelés, újsor) karakterek kezelése – többszörös és záró szóközök „lenyelése”
• tipikus értékkészlet módos ítók: – – – – – – –
xsd:enumeration xsd:length xsd:minLenght xsd:maxLength xsd:minExclusive (Inclusive) xsd:maxExclusive (Inclusive) xsd:pattern a módosítók alkalmazhatósága és hatása függ a módosított típustól is
• A módos ítók nem változtathatják meg a típus t annak eredeti deklarációjával ellentétes en (pl. nullánál kis ebb pozitív s zám).
A z XML S c h e ma d e k l a r á c ió s n ye l v
18
B u d a pe s t i Műs za k i E g ye t e mMé r é s t e c h n ik a é s In f o r má c ió s R e n d s ze r e k T a n s zé k
Típusdeklarációk módosítói (facets) – példák <xsd:simpleType> <xsd:restriction base = "xsd:string"> <xsd:length value = "2" /> <xsd:simpleType> <xsd:restriction base = "xsd:string"> <xsd:pattern value="[A-Z]{2}" />
A z XML S c h e ma d e k l a r á c ió s n ye l v
19
B u d a pe s t i Műs za k i E g ye t e mMé r é s t e c h n ik a é s In f o r má c ió s R e n d s ze r e k T a n s zé k
E lemek deklarációja • D eklaráció <xsd:element name="..." type="...">...
• A S chema tartalom modellek – a deklarált típusokra támas zkodva hozzuk létre őket – a S chema nyelv a D TD -nél szabadabb módon teszi lehetővé az elemek csoportosítását, illetve ezen csoportok elnevezését – az elemek összekapcsolásának „operátorai” (csoportosítások) • • • •
choice sequence all group
– a tartalom modellben hivatkozhatunk máshol deklarált elemekre <xsd:element ref="comment" />
A z XML S c h e ma d e k l a r á c ió s n ye l v
20
B u d a pe s t i Műs za k i E g ye t e mMé r é s t e c h n ik a é s In f o r má c ió s R e n d s ze r e k T a n s zé k
Globális és lokális elemdeklarációk • A globális deklarációk közvetlenül a gyökér (xs d:schema) elem alatt vannak. – nem hivatkozhatnak más globális elemekre (ref attribútum) – nem has ználhatják a minOccurs és maxOccurs módosítókat – a lokális deklarációkban hivatkozhatunk rájuk, és további szűkítést is alkalmazhatunk (pl. minOccurs és maxOccurs) – dokumentum példányok gyökér elemei lehetnek
• A nem globális deklarációk lokális ak. – más deklarációk belsejében helyezkednek el, érvényességük is arra terjed ki
A z XML S c h e ma d e k l a r á c ió s n ye l v
21
B u d a pe s t i Műs za k i E g ye t e mMé r é s t e c h n ik a é s In f o r má c ió s R e n d s ze r e k T a n s zé k
Attribútumok deklarációja • D eklarációjuk <xsd:attribute name="..." type="...">...
• Különböző módosítókat (S chema attribútumokat) alkalmazhatunk – – – –
default fixed use = (optional | prohibited | required) : optional ...
• Az attribútumok cs oportokba s zervezhetők – a dokumentumpéldányokban együtt használt attribútumok összefogása <xsd:attributeGroup name="GarmentGroup"> <xsd:attribute name="size" type="xsd:string"/> <xsd:attribute name="color" type="xsd:string"/> <xsd:attribute name="manufacturer" type="xsd:string"/>
• Az elemekhez has onlóan globális an és lokális an is deklarálhatjuk őket. A z XML S c h e ma d e k l a r á c ió s n ye l v
22
B u d a pe s t i Műs za k i E g ye t e mMé r é s t e c h n ik a é s In f o r má c ió s R e n d s ze r e k T a n s zé k
D okumentálás (annotációk) • E mberek és alkalmazás ok s zámára is kés zíthetjük őket. • A deklarációk dokumentálás a a deklaráció elején történik. <xsd:complexType> <xsd:annotation> <xsd:documentation xml:lang="en"> empty anonymous type with 2 attributes <xsd:complexContent> …
• Az annotációkban célszerű rögzíteni a nyelvet (xml:lang attribútum) • A jó dokumentáció nemcsak a leendő felhas ználókat s egíti, de a deklarációk kés őbbi módosítás át (a felidézést) is . A z XML S c h e ma d e k l a r á c ió s n ye l v
23
B u d a pe s t i Műs za k i E g ye t e mMé r é s t e c h n ik a é s In f o r má c ió s R e n d s ze r e k T a n s zé k
S chema dokumentumok ös szekapcsolása • Küls ő deklarációs dokumentum betöltés e – ekvivalens a dokumentum tartalmának bemásolásával <xsd:include schemaLocation="….xsd" />
– ugyanazt a cél névteret alkalmazzuk a deklarációkban
• Küls ő deklarációk betöltése és újradefiniálás a – a bemás olás után lehetőségünk van a deklarációk módosítására <xsd:redefine schemaLocation="….xsd">...
– ebben az esetben is ugyanazt a cél névteret alkalmazzuk a deklarációkban
• M ás névterek deklarációit is betölthetjük – ekvivalens a dokumentum tartalmának bemásolásával <xsd:import nameSpace="..." schemaLocation="….xsd">
– az új névtér deklarációit felhasználhatjuk a dokumentumunkban – alapvetően típusok újrahasznos ítására használjuk az import mechanizmust A z XML S c h e ma d e k l a r á c ió s n ye l v
24
B u d a pe s t i Műs za k i E g ye t e mMé r é s t e c h n ik a é s In f o r má c ió s R e n d s ze r e k T a n s zé k
A S chema deklaráció előnyei (összefoglalás) • A programozási nyelvekben megszokott típus válas ztékot kínálja (többet is) – számok, dátumok, UR I, boolean, időintervallumok – értékkészlet minta s zerinti rögzítése • Komplex, felhasználói típusok is létrehozhatók – elemeket s trukturálhatunk, tipizálhatunk – csoportosíthatjuk is őket az egyszerűbb felhasználás érdekében – speciális szövegstruktúrákat (listákat) is használhatunk • Nyitott, finomítható dokumentum s truktúrák – objektum-orientált dokumentum deklarációnak is nevezik – az egys zerű típusok esetében is (értékkészlet meghatározás a) – szűkítés: a meglevő struktúra elemeinek elhagyása – kiterjesztés: új elemek hozzáfűzése egy meglevő struktúrához A z XML S c h e ma d e k l a r á c ió s n ye l v
25
B u d a pe s t i Műs za k i E g ye t e mMé r é s t e c h n ik a é s In f o r má c ió s R e n d s ze r e k T a n s zé k
Ajánlott irodalom
A z XML S c h e ma d e k l a r á c ió s n ye l v
26
B u d a pe s t i Műs za k i E g ye t e mMé r é s t e c h n ik a é s In f o r má c ió s R e n d s ze r e k T a n s zé k
X M L dokumentumok minősítése • Jól formázott dokumentum (kötelező követelmény) – betartja a szabvány szintaktikai előírásait – eredménye, hogy könnyebb nyelvi elemzőt írni
• É rvényes s ég – – – –
a dokumentum megfelel a deklarációjának enélkül is elemezni tudjuk a dokumentumot hozzájárul a dokumentum tartalmi megértéséhez a tárolt információ kinyeréséhez elengedhetetlen
• S chema érvényes s ég – a dokumentumnak van S chema deklarációja – tipizált deklaráció és tartalom – lehetővé válik a pontosabb deklaráció és feldolgozás a programozási nyelvek típuskészletét felhasználva A z XML S c h e ma d e k l a r á c ió s n ye l v
27