XML sémák, adatmodellezés
Saját jelölőnyelv Az XML nem egy nyelv, hanem egy eszköz, szabályok összessége Amikor létrehozunk egy saját jelölőnyelvet, meghatározzuk, hogy a problémával és adattípussal kapcsolatban milyen címkéket és attribútumokat használhatunk. Ezek egymás közti viszonyát is le kell írni Például sporteredmények létrehozására: SportsML www.sportsml.org Előbbieket egy formális leírással tehetjük meg, ami megadja a dokumentumok felépítését. Ezt a formális nyelvet (szabályhalmazt) nevezzük egy jelölőnyelv sémájának.
Adatmodellezés Az a folyamat, amikor létrehozunk egy sémát egy XML dokumentumtípushoz, az adatmodellezés. A sémák lehetővé teszik a az XML dokumenttumok szerkezeti és logikai ellenőrzését. A sémák lényegében hasonlíthatók egy hivatalos pecséthez. Ennek jelentősége a feldolgozó alkalmazásoknál van. Két technológia áll rendelkezésre séma létrehozására: DTD (Document Type Definition) XSD (XML Schema Definition)
Az XML dokumentumok jól formáltsága A dokumentum érvényessége (validity) mellett másik fontos fogalom a jól formáltság. Egy dokumentum jól formázott, ha szerkezetileg megfelel az XML szabvány minden egyes előírásának (az 5 feltétel). Elképzelhető, hogy egy dokumentum jól formázott, de nem érvényes nem felel meg valamilyen szabályrendszernek. A helyességnek tehát 2 foka van: 1. Jól formáltság 2. Érvényesség (valamilyen DTD vagy XSD alapján) Minden érvényes dokumentum jól formázott, de nem minden jól formázott dokumentum érvényes.
A DTD Eredetileg az SGML (a HTML elődje) fejlesztői dolgozták ki A DTD tehát egy régi technológia, mégis a mai napig rengetegen használják A DTD egy XML-től különböző felépítésű jelölőnyelv Előnye: Rendkívül egyszerű Tömör <!ELEMENT quiz (q)+> <!ELEMENT q (question,a,b,c)> <!ATTLIST q answer (a b c) #REQUIRED> <!ELEMENT question (#PCDATA)> <!ELEMENT a (#PCDATA)> <!ELEMENT b (#PCDATA)> <!ELEMENT c (#PCDATA)>
Az XSD A DTD-t hivatott leváltani A séma létrehozásához magát az XML-t használjuk Itt már megadhatók típusok is (DTD-ben csak szöveg lehet) A W3C dolgozta ki Példa: a kvíz feladat xsd-je Előnye: Az XSD sokkal részletesebb mint a DTD XML használata az xsd-hez Hatékonyabb mint a DTD Hátrány: Nehéz őket átlátni (elsőre)
Sématechnológiák összehasonlítása A DTD-ket egy speciális nyelven kell megfogalmazni, míg XSD-nél az XML-t használjuk Az XSD számos adattípus használatát lehetővé teszi (egész, lebegőpontos számok, logikai értékek,stb), míg DTD-ben csak karakterlánc van Az XSD-ket ugyanúgy kezelhetjük, mint bármely más XML dokumentumt A DTD használata széleskörűen elterjedt Számos létező jelölőnyelv sémája DTD-ben elérhető csak
A DTD séma A DTD tehát a dokumentumok logikai szerkezetét írja le Egy DTD-ben a következő dolgokat adhatjuk meg: A dokumentumtípusban megengedett elemek körét Az egyes elemekhez rendelhető attribútumokat Amikor összerendelünk egy XML és egy DTD dokumentumot, két lehetőségünk van: Belső DTD Külső DTD A belső DTD nagyobb prioritású mint a külső (lásd. CSS) Beszélünk DTD deklarációról és definícióról Deklaráció: az XML dokumentumnak megadjuk,hogy hol a DTD Definíció: a DTD tényleges tartalmi része
A DTD részei A deklaráció általános alakja: <!DOCTYPE RootElem SYSTEM KülsőDTD [BelsőDTD] > A KülsőDTD a DTD fájl URI-ja URI: Uniform Resource Identifier, az URL ( Locator) olyan általánosított változata, amellyel fájloktól kezdve különböző hálózati erőforrásokat azonosíthatunk. A deklarációnak az XML deklaráció után, de a gyökérelem előtt kell szerepelnie Külső erőforrás használata: <?xml version="1.0" encoding="utf-8" standalone="no"?> Ha nincs DTD-nk (és egyéb információforrásunk), akkor yes -t adunk meg
Elem vagy attribútum használata? Attribútum Előny Meghatározhatjuk a lehetséges értékeit egy felsorolás formájában Lehet alapértelmezett értékük Van adattípusa (igaz szűk listából választhatunk) Tömör információtárolás Hátrány: Nem alkalmas hosszú karakterláncok tárolására Nincs lehetőség az információk egymásba ágyazására
A DTD elemei: üres elem Elemek megadásának alakja: <!ELEMENT Elemnév Elemtípus> Az XML négy elemtípust különböztet meg: 1. Empty: üres elem 2. Element-only: csak gyermekelemet tartalmaz 3. Mixed: kevert, szöveget és gyermekelemet is tartalmaz 4. Any: tetszőleges typus, bármit tartalmazhat, amit a DTD megenged 1. Üres elem: Sem szöveget sem gyermekelemet nem tartalmazhat, viszont lehetnek attribútumai Deklarációja: <!ELEMENT Elemnév EMPTY> Példa: HTML-ben <img src= kep.jpg width= 300 height= 100 alt= Kép />
A DTD elemei: csak elemeket tartalmazó elem 2. Element-only (csak elemeket tartalmaz): <!ELEMENT Elemnév Tartalomtípus> A tartalomtípus meghatározza, hogy milyen más elemeket tartalmaz az adott elem, ezt kerek zárójelek között kell megadni. Lehet sorozatokat, vagy választási csoportokat írni, a sorozatoknál az lemek sorrendje kötött A sorozatban az elemeket vessző, a csoportokban választja el Az alkalmazható szimbólumok: ( gyermekelemek ): sorozatot vagy választási csoportot fog közre, (vessző): sorozat elemeit választja el (szűrőkarakter): választási csoportok elemeit választja el Nincs szimbólum: jelzi, hogy az elem pontosan egyszer fordulhat elő? (kérdőjel): az elem pontosan egyszer, vagy egyszer sem fordulhat elő + (pluszjel): az elemnek legalább egyszer elő kell fordulnia * (csillag): az elem tetszőleges sokszor előfordulhat
Példák csak elemet tartalmazó elem DTD-jére 1. <!ELEMENT resume (intro, (education experience+)+, hobbies?, references* )> A resume csak elemeket tartalmazó elem Az intro pontosan egyszer fordul elő a resume-ben Az education és experience csoportnak legalább egyszer szerepelnie kell Az education pontosan egyszer fordul elő Az experience legalább egyszer előfordul A hobbies legfeljebb egyszer fordulhat elő A references akárhányszor előfordulhat 2. <!ELEMENT item (title, link?, description?) > Az item három elemet tartalmazhat A title mindig előfordul egyszer A link és a description vagy egyszer vagy egyszer sem fordul elő 3. <!ELEMENT item (title link description) > Az item a három elem közül az egyiket tartalmazza csak
A DTD elemei: kevert és tetszőleges tartalmú elemek 1. Csak szöveget tartalmaz: <!ELEMENT elemnév (#PCDATA) > Parsed Character Data Pl.: <!ELEMENT title (#PCDATA) > 2. A kevert elem: <!ELEMENT elemnév (#PCDATA elemlista)* > A *(csillag) a végén kötelező! Ennek gyakorlati haszna nem igazán van, kerüljük a használatát 3. A tetszőleges tartalmú elem (any) Nem rendelkeznek belső szerkezettel Bármit tartalmazhat <!ELEMENT elemnév ANY > Ennek a használata is kerülendő
Példa Hozzunk létre egy olyan adatstruktúrát, amivel recepteket tudunk tárolni. Recept neve, összetevők, elkészítés Majd hozzunk létre a struktúrához egy DTD sémát Hozzunk létre egy adatstruktúrát mozifilmek adatainak tárolásához Majd hozzunk létre a struktúrához egy DTD sémát
Attribútumok DTD-ben Az attribútumot tehát kiegészítő információk tárolására használjuk Az attribútum név/érték páros Megadása: <!ATTLIST Elemnév Attribútumnév Attrib.típus Default > Az alapértelmezett értéknek (default) 4 típusa létezik: #REQUIRED kötelező az attr. Megadása #IMPLIED opcionális a megadása #FIXED az attr. kötött értékkel rendlkezik, az értéket a deklarációban a #FIXED után kell megadni között Default az alapértelmezett érték, ha nem adunk meg értéket neki
Attribútumtípusok DTD-ben Az attribútumoknak 10 típust adhatunk meg: CDATA szöveges adat Enumerated karakterek sorozata NOTATION egy a DTD más pontján megadott jelölés ENTITY külső bináris egyed ENTITIES több külső bináris egyed üres karakterekkel elválasztva ID egyedi azonosító IDREF egy a DTD más pontján deklarált ID-re mutató hivatkozás IDREFS több különböző, máshol deklarált ID-re mutató hivatkozás NMTOKEN XML tokenekből (számok, betűk, pontok, kötőjelek, kettőspontok, aláhúzásjelek) felépített név NMTOKENS több XML tokenből felépített név
Attribútumtípusok osztáyozása: Az előző típusokat feloszthatjuk 3 részre: 1. Karakterláncok: a leggyakrabban használt típus CDATA Pl.: <!ATTLIST education school CDATA #REQUIRED > Az education elemnek van egy school attribútuma, melynek megadása kötelező 2. Felsorolt típus: a felsorolt típushoz tartozó attribútumok értékei egy halmazból kerülnek ki. A deklarációban a lehetséges étékeket kell megadni <!ATTLIST education degree (doctor phd master) teacher >
Attribútumtípusok osztályozása 3. Tokenizált attribútumok: A tokenizált attribútum értékét az alkalmazás tokenekre bontja. A tokenek határai az üres karakterek (szóköz, tabulátor, új sor). ID: mindig betűvel kezdődik és számmal, ponttal, aláhúzással vagy kötőjellel folytatódik Pl: <!ATTLIST part id ID #REQUIRED > IDREF, IDREFS: kereszthivatkozások megadása Pl.: <family id="f01" husband="p01" wife="p02" children="p03 P04 P05"> </family> <!ATTLIST family id ID #REQUIRED husband IDREF #REQUIRED wife IDREF #REQUIRED children IDREFS #IMPLIED > NMTOKEN, NMTOKENS: speciális karaktersorozat, csak nevekben megengedett karakterek, nem lehet szóköz és szám ENTITY, ENTITIES (lásd.:egyedek): Pl.: <!ATTLIST photo image ENTITY #IMPLIED >
Példa egy teljes DTD-re: edzésterv Készítsünk egy számítógépes edzéstervet. Amit tárolni kell: Dátum (date) edzés ideje Edzéstípus (type) edzés típusa (úszás, futás vagy kerékpár) Pulzusszám (heartrate) átlagos pulzusszám az edzés során Időtartam (duration) az edzés hossza (mp, perc, vagy óra) Távolság (distance) a távolság km-ben vagy mérföldben Hely (location) az edzés helye Megjegyzések (comments) egyéb információ Több megoldás létezik, egy lehetséges megoldás: Attribútum: dátum, edzéstípus, pulzusszám (gondolkodjunk, hogy melyiket kötelező megadni és melyiket nem) Elem: időtartam, távolság, hely, megjegyzések Az XML egyik szabálya: minél több korlátozást alkalmazunk egy dokumentum tartalmával kapcsolatban, annál jobb lesz a szerkezete.
Mik azok az egyedek? Egyedeknek számítanak az XML dokumentumon kívüli hivatkozások (pl. fájlra, vagy weboldalra, stb.) Pl.: a HTML-ben egy kép egyedként van jelen Az XML dokumentum elején a külső DTD-ra való hivatkozás (vagyis a DTD fájl) egyednek számít. Megkülönböztetünk: Értelmezett egyed: amit a dokumentum feldolgozása során értelmezni fognak (csak szöveges adat lehet) Nem értelmezett egyed: szöveget és bináris adatokat egyaránt tartalmazhat Az értelmezett egyeden belül megkülönböztetünk: Általános egyedek Paraméteregyedek
Mik azok az egyedek? Általános egyedek: Amit a dokumentumban lévő használatra terveztek. Pl.: egy cégnév vagy egy cím, amit többször fel akarunk használni Megadása: <!ENTITY Egyednév Egyeddefiníció > Kötelező belső DTD-ben ezt megadni!!!! Pl.: <!ENTITY ekf Eszterházy Károly Főiskola > Ilyen egyedek a <>, stb. Paraméteregyedek: Kizárólag a DTD-ben használunk, célja: helyettesítés Előfordulhat, hogy több elemnél ugyanolyan attribútumlistát használunk, ilyenkor ezt berakhatjuk egy paraméteregyedbe Alakja: <!ENTITY % Egyednév Egyeddefiníció > Pl.: <!ENTITY % autoelems year, make, model > Hivatkozás: %Egyednév; Pl.: <!ELEMENT car (%autoelems;) > Pl.: <!ELEMENT truck (%autoelems;) >
Feladat: Készítsünk XML rádiót Egy FLASH lejátszó XML dokumentumot képes kezelni. Cím: www.catalistcreative.com Adott a DTD fájl, készítsük el ez alapján az XML dokumentumot DTD: <!ELEMENT radio (station+) > <!ELEMENT station (song+) > <!ATTLIST station name CDATA #REQUIRED > <!ELEMENT song (title,composer,file) > <!ELEMENT title (#PCDATA) > <!ELEMENT composer (#PCDATA) > <!ELEMENT file (#PCDATA) >
A névterek használata A névtér olyan elem és attribútumnevek halmaza, melyeket egy adott XML dokumentumban használhatunk. Rendeltetése: a nevek közti ütközések feloldása Pl.: zene és videógyűjtemények leírása egy fájlon belül, és pl. mindkét címe <title> Új fogalom: érvényességi kör Pl.: edzés XML Egy elem v. attr. érv. köre a hierarchiában elfoglalt helye. Egy adott csomóponton bevezetett névtér az alatta lévő elemekre fejti ki hatását. Vannak globális névterek, amelyek a dokumentum egészére hatnak.
A névterek használata Névterek elnevezése: Névterekhez kizárólag URI (egységes erőforrás azonosító) címeket rendelhetünk. Pl.: <media xmlns:mov= http://www.ektf.hu/~szlahorek/ns/media > A létezés nem követelmény, az egyediség számít! Névterek deklarálása: Amennyiben egy névteret a dokumentum egészére szeretnénk alkalmazni, azt a gyökérelemben kell megadni. A névtér megadása: xmlns:névtérnév= az uri azonosító A névtérnév megadása nem kötelező, csak akkor, ha minősített neveket akarunk használni az elemek és attribútumok elnevezésénél. Pl.: <mov:title>volt egyszer egy vadnyugat</mov:title> Két lehetőség: Alapértelmezett névtér deklaráció: nem kell névtérnevet adni Explicit névtér deklaráció: névtérnevet kell megadni, és mindazon elemnél és attribútumnál használni kell a névtérnevet, amit a névtérhez akarunk sorolni. Pl.: <mov:title>
A névterek használata Megoldás a zene és videogyűjtemények leírására: <mediacollection xmlns:mov="http://www.ektf.hu/~szlahorek/ns/movies" xmlns:mus="http://www.ektf.hu/~szlahorek/ns/music"> <mov:movie mov:type= vigjatek" mov:year="1988"> <mov:title>éjszakai rohanás</mov:title> <mov:comments> utazásos vígjáték </mov:comments> </mov:movie> <mus:music mus:type= trance" mus:year= 2008"> <mus:title>somersault</mus:title> <mus:artist>chicane</mus:artist> <mus:label>trance, club</mus:label> <mus:comments>koncert: 2008. június. 12.</mus:comments> </mus:music> </mediacollection>
Az XML schema (xsd) Az XML sémák maguk is XML dokumentumok. Érdekes: mivel az XSD-k is XML dokumentumok, ezekhez is van séma, és ez a séma egy DTD séma. Minden XSD dokumentum alapja: <?xml version="1.0" encoding="utf-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema"> </xs:schema> Explicit névtérdeklarációt használ! Az XSD erejét az adattípusai jelentik. Egyszerű adattípusok (számok, dátumok, listák, stb.) Összetett adattípusok (kevert elemek, elemsorozatok) http://www.w3.org/tr/xmlschema-2/#built-in-datatypes Elem definiálása: xs:element, attribútum definiálása: xs:attribute Pl.: <xs:element name= name type= xs:string > Összekapcsolás: <RootElem xmlns:xsi=http://www.w3.org/2001/xmlschema-instance xsi:nonamespaceschemalocation= az xsd fájl elérése">
Az XML schema egyszerű típusok A karakterlánc (string) típus: Szövegrészt tartalmazó elem vagy attribútum használatakor. Alakja: type= xs:string Pl.: <name>juhász Endre</name> <xs:element name= name type= xs:string /> A logikai típus Igaz vagy hamis értékű elemek vagy attribútumok használatakor. Alakja: xs:boolean Pl.: <xs:attribute name= married type= xs:boolean /> Számtípusok Numerikus értékek esetén: xs:byte, xs:short, xs:integer, stb. : egész számok, például 3 xs:decimal : decimális számok, például 3,14 (törtrészt is tartalmazhatnak) xs:float : 32 biten ábrázolt lebegőpontos számok, például 6,0022E23 xs:double : 64 biten ábrázolt lebegőpontos számok xs:positiveinteger, xs:negativeinteger, xs:nonpositiveinteger, xs:nonnegativeinteger
Az XML schema egyszerű típusok Dátum és idő típusok xs:date - "YYYY-MM-DD alakú dátum <xs:element name="start" type="xs:date"/> <start>2002-09-24</start> <start>2002-09-24-06:00</start> xs:time - "hh:mm:ss alakú időpont <xs:element name="start" type="xs:time"/> <start>09:00:00</start> xs:datetime - "YYYY-MM-DDThh:mm:ss alakú dátum és időpont, a T az elválasztó karakter <xs:element name="startdate" type="xs:datetime"/> <startdate>2002-05-30t09:00:00</startdate> xs:duration - "PnYnMnDTnHnMnS alakú időtartomány P : kötelező ny : évek száma, nm : hónapok száma, nd : napok száma T : elválasztó karakter a dátum és idő között nh : órák száma, nm : percek száma, ns : másodpercek száma <xs:element name="period" type="xs:duration"/> <period>p5y2m10d</period>
Az XML schema egyszerű típusok Dátum és idő típusok gday : a dátum nap részét jelenti (DD) gmonth : a dátum hónap részét jelenti (MM) gmonthday : a dátum hónap és nap részét jelenti (MM-DD) gyear : a dátum év részét jelenti (YYYY) gyearmonth : a dátum év és hónap részét jelenti (YYYY-MM)
Az XML schema egyéni típusok Az XML lehetővé teszi saját típusok létrehozását Egy típussal kapcsolatban korlátozhatjuk az értéktartományt vagy egy lista formájában megadhatjuk a felvehető értékek halmazát, stb. A deklarációt az xs:simpletype-al kell kezdeni: <xs:simpletype name= az új típus neve > típusmeghatározás </xs:simpletype> Hivatk.: <xs:element name= elemnév type= az új típus neve /> Vagy: <xs:element name= elemnév"> <xs:simpletype> típusmeghatározás </xs:simpletype> </xs:element> A típusmeghatározás lehet: megszorítás (xs:restriction), unió (xs:union) vagy lista (xs:list)
Az XML schema egyéni típusok - megszorítások Értéktartomány megszorítások: xs:mininclusive a legkisebb megengedett érték xs:minexclusive a legkisebb megengedett érték (a határ nem számít bele) xs:maxinclusive a legnagyobb megengedett érték xs:maxexclusive a legnagyobb megengedett érték (a határ nem számít bele) Pl.: <xs:element name="age"> <xs:simpletype> <xs:restriction base="xs:integer"> <xs:mininclusive value="0"/> <xs:maxinclusive value="120"/> </xs:restriction> </xs:simpletype> </xs:element>
Az XML schema egyéni típusok - megszorítások Szöveghossz megszorítások: Teljes hossz: xs:length, megadása: xs:value Pl.: <xs:restriction base="xs:string"> <xs:length value="4"/> </xs:restriction> Alsó, felső határ: xs:minlength, xs:maxlength Pl.: <xs:restriction base="xs:string"> <xs:minlength value="5"/> <xs:maxlength value="8"/> </xs:restriction> Whitespace megszorítás: xs:whitespace Lehetőségek: preserve : nem törli a whitespace karaktereket replace: minden whitespace karaktert space-re cserél collapse : a induló és záró whitespace-eket törli, a többit space-re cseréli, több egymás utáni space-t eggyel helyettesít
Az XML schema egyéni típusok - megszorítások Felsorolás: Csak bizonyos előre meghatározott értékeket vehetnek fel. Alakja: xs:enumeration, value= érték Pl.:<xs:restriction base="xs:string"> <xs:enumeration value="audi"/> <xs:enumeration value="golf"/> <xs:enumeration value="bmw"/> </xs:restriction> Listák: Egy elem vagy attribútum egymástól szóközzel elválasztott értékeket vehet fel. Alakja: xs:lista, itemtype: típus Pl.: <xs:simpletype> <xs:list itemtype="xs:byte"/> <!-- 123 45 56 31 --> </xs:simpletype>
Az XML schema egyéni típusok reguláris kifejezés Nagyon hasznos megszorítás. Egy adott sablon szerinti felépítésű értékeket fogad el. Alakja: xs:pattern, value= sablon Mik használhatók a sablonban:. (pont) bármely karakter \d bármely számjegy \D bármely nem számjegy \s bármely üres karakter \S bármely nem üres karakter x? az x egy vagy nulla előfordulása x+ - az x egy vagy több előfordulása x* - az x tetszőleges sok előfordulása (xy) az x és y csoporttá kapcsolása x y x vagy y [xyz] az x,y vagy z közül bármelyik [x-y] az x és y által meghatározott tartományból bármi x{n} az x n számú előfordulása egy sorban x{n,m} az x legalább n, de legfeljebb m előfordulása
Az XML schema egyéni típusok reguláris kifejezés Példák reguláris kifejezés használatára: <xs:element name= nem"> <xs:simpletype> <xs:restriction base="xs:string"> <xs:pattern value= férfi nő"/> </xs:restriction> </xs:simpletype> </xs:element> <xs:element name= szöveg"> <xs:simpletype> <xs:restriction base="xs:string"> <xs:pattern value="([a-z][a-z])+"/> <! stop helyes, egyéb nem --> </xs:restriction> </xs:simpletype> </xs:element> <xs:pattern value="\d{2}-\d{2}-\d{3}-\d{4}"/> <!-- mobilszám mintája -->
Az XML schema összetett típusok összetett típusok létrehozása: xs:complextype Az összetett típusokat 4 csoportba sorolhatjuk: Üres elemek (attribútumokat tartalmaznak) Csak elemeket tartalmazó elemek Kevert tartalmú elemek (elemek + attribútumok) Sorozatok és választási listák
Az XML schema összetett típusok üres elemek Létrehozása: xs:complextype és xs:complexcontent elemekkel Definiáljunk egy auto elemet, aminek van évjárat, márka, modell attra. <xs:element name="auto"> <xs:complextype> <xs:complexcontent> <xs:extension base="xs:anytype"> /azt jelenti, hogy semelyik típus nem képezi alapját <xs:attribute name="évjárat" type="xs:positiveinteger"/> <xs:attribute name="márka" type="xs:string"/> <xs:attribute name="modell" type="xs:string"/> </xs:extension> </xs:complexcontent> </xs:complextype> </xs:element> Vagy <xs:element name="auto"> <xs:complextype> <xs:attribute name="évjárat" type="xs:positiveinteger"/> <xs:attribute name="márka" type="xs:string"/> <xs:attribute name="modell" type="xs:string"/> </xs:complextype> </xs:element>
Az XML schema összetett típusok Csak elemeket tartalmazó elemek Egyszerűen az xs:complextype segítségével tehetjük meg Pl.: <xs:element name="person"> <xs:complextype> <xs:sequence> <xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/> </xs:sequence> </xs:complextype> </xs:element> Kevert tartalmú elemek (elemeket és attribútumokat tartalmaz) Létrehozása: xs:complextype és xs:simplecontent segítségével Egyes esetekben(szöveg + gyermekelem) használhatjuk az xs:complextype esetében a mixed= true paramétert is.
Az XML schema összetett típusok Kevert tartalmú elemek példa (csak szöveg, nincs gyermekelem): <distance units="km">123000</distance> <xs:element name="distance"> <xs:complextype> <xs:simplecontent> <xs:extension base="xs:positiveinteger"> <xs:attribute name="units"> <xs:simpletype> <xs:restriction base="xs:string"> <xs:pattern value="miles km"/> </xs:restriction> </xs:simpletype> </xs:attribute> </xs:extension> </xs:simplecontent> </xs:complextype> </xs:element>
Az XML schema összetett típusok Kevert tartalmú elemek példa (szöveg és gyermekelem), használni kell a mixed= true paramétert az xs:complextype-ban. <food type="vegetable"> sárgarépa <warranty>2008-10-12</warranty> </food> <xs:element name="food > <xs:complextype mixed="true"> <xs:sequence> <xs:element name="warranty" type="xs:date"/> </xs:sequence> <xs:attribute name="type" type="xs:string"/> </xs:complextype> </xs:element>
Az XML schema összetett típusok Sorozatok: A sorozatok gyermekelemek olyan listája, amely azok pontos megjelenési sorrendjét írja elő. Alakja: xs:sequence Az adott sorrendben felsoroljuk az elemeket benne. Példa: <xs:element name= quiz > <xs:complextype> <xs:sequence> <xs:element name= question type= xs:string /> <xs:element name= answer type= xs:string /> </xs:sequence> </xs:complextype> </xs:element> Alapértelmezés: 1 sorozat csak egyszer fordulhat elő egy elemen belül Használhatjuk a minoccurs és maxoccurs paramétereket Előbbieket az xs:element tagoknál is használhatjuk
Az XML schema összetett típusok Választások: Ha olyan elemeket akarunk létrehozni, amely választható elemek közül csak egyet tartalmazhat, akkor xs:choice-al tehetjük meg. Ekkor fel kell sorolnunk a választható elemeket. Példa: <xs:element name= id"> <xs:complextype> <xs:choice> <xs:element name= szemigszam" type= xs:positiveinteger"/> <xs:sequence> <xs:element name= name" type="xs:string"/> <xs:element name= birthdate" type= xs:string"/> </xs:sequence> <xs:element name="utlevelszam" type= xs:positiveinteger"/> </xs:choice> </xs:complextype> </xs:element>
Feladat egy teljes XML sémára Készítsük el az alábbi XML fájlhoz az XSD sémát! <persons> <person> <full_name>hege Refsnes</full_name> <child_name>cecilie</child_name> </person> <person> <full_name>tove Refsnes</full_name> <child_name>hege</child_name> <child_name>stale</child_name> </person> <person> <full_name>stale Refsnes</full_name> </person> </persons> Készítsük el a korábbi számítógépes edzéstervünk XML fájljához az XSD sémát!
Elem El
Elem El
Elem El