XSD - telescript.denayer.wenk.betelescript.denayer.wenk.be/~jve/XSD.pdf · Geldige XML •...

47
XSD [email protected] http://telescript.denayer.wenk.be/~jve

Transcript of XSD - telescript.denayer.wenk.betelescript.denayer.wenk.be/~jve/XSD.pdf · Geldige XML •...

Page 2: XSD - telescript.denayer.wenk.betelescript.denayer.wenk.be/~jve/XSD.pdf · Geldige XML • Algemeen: • Welgevormd • Specifiek: • Geldig   hobo

Geldige XML

• Algemeen:

• Welgevormd

• Specifiek:

• Geldig

<instrument><naam> hobo</naam><soort> blaas</soort><materiaal> hout </materiaal>

</instument>

• Hangen af van het soort van gegevens

• En hoe je die gegevens wilt voorstellen

Page 3: XSD - telescript.denayer.wenk.betelescript.denayer.wenk.be/~jve/XSD.pdf · Geldige XML • Algemeen: • Welgevormd • Specifiek: • Geldig   hobo

<instrument><naam> hobo</naam><soort> blaas</soort><materiaal> hout </materiaal>

</instument>

<houtblazer naam=“hobo” />

<voorwerp><naam> hobo </naam><functie>

<muziek type=“blazer” /></functie><materiaal> hout </materiaal>

</voorwerp>

...

...

Page 4: XSD - telescript.denayer.wenk.betelescript.denayer.wenk.be/~jve/XSD.pdf · Geldige XML • Algemeen: • Welgevormd • Specifiek: • Geldig   hobo

Bijvoorbeeld<instrument>

<naam> hobo</naam><soort> blaas</soort><materiaal> hout </materiaal>

</instument>

• Elk instrument moet een naam hebben

• Een instrument mag een materiaal hebben, maar dat moet niet

• De naam moet voor de soort komen

Page 5: XSD - telescript.denayer.wenk.betelescript.denayer.wenk.be/~jve/XSD.pdf · Geldige XML • Algemeen: • Welgevormd • Specifiek: • Geldig   hobo

XML beschrijver

• Geeft de specifieke vereisten

• Definiëert hoe je gekozen hebt de gegevens voor te stellen

~ Databank schema

Page 6: XSD - telescript.denayer.wenk.betelescript.denayer.wenk.be/~jve/XSD.pdf · Geldige XML • Algemeen: • Welgevormd • Specifiek: • Geldig   hobo

Twee opties

• DTD: Document Type Definition

• Speciale syntax:

<!ELEMENT liedje (titel, artiest)>

• Eerder beperkt

• XSD: XML Schema Definition

Page 7: XSD - telescript.denayer.wenk.betelescript.denayer.wenk.be/~jve/XSD.pdf · Geldige XML • Algemeen: • Welgevormd • Specifiek: • Geldig   hobo

Twee opties

• DTD: Document Type Definition

• XSD: XML Schema Definition

• Informatie over data voorstelling is ook gewoon data

• Ook gewoon in XML ipv. nieuwe syntax!

• Uitgebreider dan DTD

Page 8: XSD - telescript.denayer.wenk.betelescript.denayer.wenk.be/~jve/XSD.pdf · Geldige XML • Algemeen: • Welgevormd • Specifiek: • Geldig   hobo

Terminology

<instrument soort = “blaas”> <naam> hobo </naam>

</instrument>

•Element•Inhoud•Attribuut•Waarde•Tekst

Page 9: XSD - telescript.denayer.wenk.betelescript.denayer.wenk.be/~jve/XSD.pdf · Geldige XML • Algemeen: • Welgevormd • Specifiek: • Geldig   hobo

• In mijn xml-bestand laat ik een element toe met als naam “instrument”

• Dit element kan een attribuut “soort” hebben

XML

<element name = “instrument” /><attribute name = “soort” />

Nood aan metatags & regels daarvoor

Page 10: XSD - telescript.denayer.wenk.betelescript.denayer.wenk.be/~jve/XSD.pdf · Geldige XML • Algemeen: • Welgevormd • Specifiek: • Geldig   hobo

• http://www.w3.org/2001/XMLSchema

• Naamruimte waarbinnen metatags gedefiniëerd worden

• Specifiëert voorwaarden waaraan een XSD bestand moet voldoen

• En is zelf ook een XSD bestand

Meta-informatie

Page 11: XSD - telescript.denayer.wenk.betelescript.denayer.wenk.be/~jve/XSD.pdf · Geldige XML • Algemeen: • Welgevormd • Specifiek: • Geldig   hobo

Herinnering: Naamruimtes

• Vermijden dat dezelfde naam in verschillende contexten gebruikt wordt

• Naamruimte wordt geïdentificeerd door URI en krijgt prefix

<BVLandschap xmlns:kh= “http://denayer.be/koningshuis”xmlns:schl= “http://denayer.be/schlagers”>

<kh:koningin> Paola </kh:koningin><schl:koningin> Laura Lynn </schl:koningin>

</BVLandschap>

Page 12: XSD - telescript.denayer.wenk.betelescript.denayer.wenk.be/~jve/XSD.pdf · Geldige XML • Algemeen: • Welgevormd • Specifiek: • Geldig   hobo

Herinnering: Naamruimtes

• Vermijden dat dezelfde naam in verschillende contexten gebruikt wordt

• Naamruimte wordt geïdentificeerd door URI en krijgt prefix

<BVLandschap xmlns= “http://denayer.be/koningshuis”xmlns:schl= “http://denayer.be/schlagers”>

<koningin> Paola </koningin><schl:koningin> Laura Lynn </schl:koningin>

</BVLandschap>

Page 13: XSD - telescript.denayer.wenk.betelescript.denayer.wenk.be/~jve/XSD.pdf · Geldige XML • Algemeen: • Welgevormd • Specifiek: • Geldig   hobo

XSD heeft <schema> als wortel

<xs:schema

xmlns:xs= “http://www.w3.org/2001/XMLSchema”>

targetNamespace = “http://naamruimte.be”

xmlns = “http://naamruimte.be”

elementFormDefault="qualified"/>

<element> <attribute> ...

<instrument> <materiaal> ...

Page 14: XSD - telescript.denayer.wenk.betelescript.denayer.wenk.be/~jve/XSD.pdf · Geldige XML • Algemeen: • Welgevormd • Specifiek: • Geldig   hobo

XSD heeft <schema> als wortel

<schema

xmlns = “http://www.w3.org/2001/XMLSchema”>

targetNamespace = “http://naamruimte.be”

xmlns:tg = “http://naamruimte.be”

elementFormDefault="qualified"/>

<element> <attribute> ...

<instrument> <materiaal> ...

Of

Page 16: XSD - telescript.denayer.wenk.betelescript.denayer.wenk.be/~jve/XSD.pdf · Geldige XML • Algemeen: • Welgevormd • Specifiek: • Geldig   hobo

Cruciaal: Datatypes• In XSD heeft elk element een datatype

• In XSD heeft elk attribuut een datatype

Datatype

Enkelvoudig Samengesteld

Ingebouwd Gebruiker

Page 17: XSD - telescript.denayer.wenk.betelescript.denayer.wenk.be/~jve/XSD.pdf · Geldige XML • Algemeen: • Welgevormd • Specifiek: • Geldig   hobo

Ingebouwde DTs

• xsd:string

• xsd:decimal

• xsd:integer

• xsd:boolean

• xsd:date

• xsd:time

• ...

<xsd:element name = “naam” type = “xsd:string” />

<naam> Joost </naam>

Page 18: XSD - telescript.denayer.wenk.betelescript.denayer.wenk.be/~jve/XSD.pdf · Geldige XML • Algemeen: • Welgevormd • Specifiek: • Geldig   hobo

Afgeleide enkelvoudige types

Datatype

Enkelvoudig Samengesteld

Ingebouwd Gebruiker

Page 19: XSD - telescript.denayer.wenk.betelescript.denayer.wenk.be/~jve/XSD.pdf · Geldige XML • Algemeen: • Welgevormd • Specifiek: • Geldig   hobo

• Opleggen van extra beperkingen aan ingebouwde types

Afgeleide enkelvoudige types

<xsd:simpleType name="kortWoord"> <xsd:restriction base="xsd:string"> <xsd:maxLength value="5" /> </xsd:restriction></xsd:simpleType>

<xsd:element name="afkorting" type="kortWoord" />

Page 20: XSD - telescript.denayer.wenk.betelescript.denayer.wenk.be/~jve/XSD.pdf · Geldige XML • Algemeen: • Welgevormd • Specifiek: • Geldig   hobo

Alternatief

<xsd:element name="afkorting"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:maxLength value="5" /> </xsd:restriction> </xsd:simpleType></xsd:element>

Naamloos type

Page 21: XSD - telescript.denayer.wenk.betelescript.denayer.wenk.be/~jve/XSD.pdf · Geldige XML • Algemeen: • Welgevormd • Specifiek: • Geldig   hobo

Soorten beperkingen

• Strings

• length

• minLength

• maxLength

• pattern

Page 22: XSD - telescript.denayer.wenk.betelescript.denayer.wenk.be/~jve/XSD.pdf · Geldige XML • Algemeen: • Welgevormd • Specifiek: • Geldig   hobo

Soorten beperkingen

• Getallen

• minInclusive, minExclusive

• maxInclusive, maxExclusive

• totalDigits

• fractionDigits

Page 23: XSD - telescript.denayer.wenk.betelescript.denayer.wenk.be/~jve/XSD.pdf · Geldige XML • Algemeen: • Welgevormd • Specifiek: • Geldig   hobo

Soorten beperkingen

• Opsomming:

<xs:simpleType name="haarkleur"> <xs:restriction base="xs:string"> <xs:enumeration value="blond"/> <xs:enumeration value="bruin"/> <xs:enumeration value="zwart"/> <xs:enumeration value="rood"/> </xs:restriction> </xs:simpleType>

Page 24: XSD - telescript.denayer.wenk.betelescript.denayer.wenk.be/~jve/XSD.pdf · Geldige XML • Algemeen: • Welgevormd • Specifiek: • Geldig   hobo

Enkelvoudige types

Datatype

Enkelvoudig Samengesteld

Ingebouwd Gebruiker

Hebben aantal extra mogelijkheden

Page 25: XSD - telescript.denayer.wenk.betelescript.denayer.wenk.be/~jve/XSD.pdf · Geldige XML • Algemeen: • Welgevormd • Specifiek: • Geldig   hobo

• Element met enkelvoudig type

<xsd:element name="haarkleur" type="xsd:string"/>

• Kan default waarde hebben

<xsd:element name="haarkleur" type="xsd:string" default="blond" />

<haarkleur /> <haarkleur>blond</haarkleur>=

Page 26: XSD - telescript.denayer.wenk.betelescript.denayer.wenk.be/~jve/XSD.pdf · Geldige XML • Algemeen: • Welgevormd • Specifiek: • Geldig   hobo

• Element met enkelvoudig type

<xsd:element name="status" type="xsd:string"/>

• Kan vaste waarde hebben

<xsd:element name="status" type="xsd:string" fixed="aanwezig" />

<status> aanwezig </status>

Page 27: XSD - telescript.denayer.wenk.betelescript.denayer.wenk.be/~jve/XSD.pdf · Geldige XML • Algemeen: • Welgevormd • Specifiek: • Geldig   hobo

Samengesteld typesDatatype

Enkelvoudig Samengesteld

Element bevat:• Attribuut• Ander element

Page 28: XSD - telescript.denayer.wenk.betelescript.denayer.wenk.be/~jve/XSD.pdf · Geldige XML • Algemeen: • Welgevormd • Specifiek: • Geldig   hobo

Samengesteld typesDatatype

Enkelvoudig Samengesteld

GemengdSamengesteldEnkelvoudigLeegInhoud:

Page 29: XSD - telescript.denayer.wenk.betelescript.denayer.wenk.be/~jve/XSD.pdf · Geldige XML • Algemeen: • Welgevormd • Specifiek: • Geldig   hobo

Met lege inhoud<xs:element name="schoen"> <xs:complexType> <xs:attribute name="maat" type="integer"> </xs:complexType></xs:element>

<xs:element name="schoen" type = "schoenType" /><xs:complexType name = "schoenType"> <xs:attribute name="maat" type="integer"></xs:complexType>

Page 30: XSD - telescript.denayer.wenk.betelescript.denayer.wenk.be/~jve/XSD.pdf · Geldige XML • Algemeen: • Welgevormd • Specifiek: • Geldig   hobo

Met lege inhoud<xs:element name="schoen"> <xs:complexType> <xs:attribute name="maat" type="xs:integer"> </xs:complexType></xs:element>

<schoen maat = "42" />

Page 31: XSD - telescript.denayer.wenk.betelescript.denayer.wenk.be/~jve/XSD.pdf · Geldige XML • Algemeen: • Welgevormd • Specifiek: • Geldig   hobo

Met enkelvoudige inhoud

<xsd:element name="lengte"> <xsd:complexType> <xsd:simpleContent> <xsd:extension base="xsd:decimal"> <xsd:attribute name="eenheid" type="xsd:string"/> </xsd:extension> </xsd:simpleContent> </xsd:complexType></xsd:element>

<lengte eenheid = "cm"> 20.4 </lengte>

Page 32: XSD - telescript.denayer.wenk.betelescript.denayer.wenk.be/~jve/XSD.pdf · Geldige XML • Algemeen: • Welgevormd • Specifiek: • Geldig   hobo

Vgl. enkelvoudig type

<xsd:element name="lengte" type="xsd:decimal" />

Element met enkelvoudig type:

Element met samengesteld type met enkelvoudige inhoud:

<xsd:element name="lengte"> <xsd:complexType> <xsd:simpleContent>

... </xsd:simpleContent> </xsd:complexType></xsd:element>

attributen

Page 33: XSD - telescript.denayer.wenk.betelescript.denayer.wenk.be/~jve/XSD.pdf · Geldige XML • Algemeen: • Welgevormd • Specifiek: • Geldig   hobo

Samengesteld typesDatatype

Enkelvoudig Samengesteld

GemengdSamengesteldEnkelvoudigLeegInhoud:

Element dat andere elementen bevat

Page 34: XSD - telescript.denayer.wenk.betelescript.denayer.wenk.be/~jve/XSD.pdf · Geldige XML • Algemeen: • Welgevormd • Specifiek: • Geldig   hobo

Met samengestelde inhoud

<xsd:complexType name="slagwerkType"> <xsd:all> <xsd:element name="naam" type="string" /> <xsd:element name="materiaal" type="string" /></xsd:all> </xsd:complexType><xsd:element name="slagwerk" type="slagwerkType" />

<slagwerk> <naam> vibrafoon </naam> <materiaal> metaal </materiaal></slagwerk>

Page 35: XSD - telescript.denayer.wenk.betelescript.denayer.wenk.be/~jve/XSD.pdf · Geldige XML • Algemeen: • Welgevormd • Specifiek: • Geldig   hobo

Samengesteld typesDatatype

Enkelvoudig Samengesteld

GemengdSamengesteldEnkelvoudigLeegInhoud:

All Choose Sequence

Page 36: XSD - telescript.denayer.wenk.betelescript.denayer.wenk.be/~jve/XSD.pdf · Geldige XML • Algemeen: • Welgevormd • Specifiek: • Geldig   hobo

<xsd:complexType name="instrumentType"> <xsd:choose> <xsd:element name="houtblazer" type="string" /> <xsd:element name="koperblazer" type="string" /> <xsd:element name="slagwerk" type="string" /> </xsd:choose></xsd:complexType>

<instrument> <slagwerk>marimba</slagwerk></instrument>

Page 37: XSD - telescript.denayer.wenk.betelescript.denayer.wenk.be/~jve/XSD.pdf · Geldige XML • Algemeen: • Welgevormd • Specifiek: • Geldig   hobo

<xsd:complexType name="instrumentType"> <xsd:all> <xsd:element name="name" type="string" /> <xsd:element name="soort" type="string" /> <xsd:element name="materiaal" type="string" /> </xsd:all></xsd:complexType>

<instrument> <soort> blaas </soort> <materiaal> koper </materiaal> <naam> hoorn </naam></instrument>

Page 38: XSD - telescript.denayer.wenk.betelescript.denayer.wenk.be/~jve/XSD.pdf · Geldige XML • Algemeen: • Welgevormd • Specifiek: • Geldig   hobo

<xsd:complexType name="instrumentType"> <xsd:sequence> <xsd:element name="name" type="string" /> <xsd:element name="soort" type="string" /> <xsd:element name="materiaal" type="string" /> </xsd:sequence></xsd:complexType>

<instrument><naam> hoorn </naam>

<soort> blaas </soort><materiaal> koper </materiaal>

</instrument>

Page 39: XSD - telescript.denayer.wenk.betelescript.denayer.wenk.be/~jve/XSD.pdf · Geldige XML • Algemeen: • Welgevormd • Specifiek: • Geldig   hobo

Aantal voorkomens<xsd:complexType name= "noten"> <xsd:sequence> <xsd:element name="noot" type="string" minOccurs="0" maxOccurs="16"/> </xsd:sequence></xsd:complexType><xsd:element name="maat" type= "noten" >

<maat> <noot>do</noot> <noot>re</noot> </maat>

Page 40: XSD - telescript.denayer.wenk.betelescript.denayer.wenk.be/~jve/XSD.pdf · Geldige XML • Algemeen: • Welgevormd • Specifiek: • Geldig   hobo

Samengesteld typesDatatype

Enkelvoudig Samengesteld

GemengdSamengesteldEnkelvoudigLeegInhoud:

Element dat zowel andere elementen als gewone tekst bevat

Page 41: XSD - telescript.denayer.wenk.betelescript.denayer.wenk.be/~jve/XSD.pdf · Geldige XML • Algemeen: • Welgevormd • Specifiek: • Geldig   hobo

Gemengde inhoud<xsd:element name="aanspreking"> <xsd:complexType mixed = "true"> <xsd:sequence> <xsd:element name="naam" /> </xsd:sequence> </xsd:complexType></xsd:element>

<aanspreking> Beste mevrouw <naam>Tack</naam>,</aanspreking>

Page 42: XSD - telescript.denayer.wenk.betelescript.denayer.wenk.be/~jve/XSD.pdf · Geldige XML • Algemeen: • Welgevormd • Specifiek: • Geldig   hobo

DatatypesDatatype

Enkelvoudig Samengesteld

GemengdSamengesteldEnkelvoudigLeeg

Ingebouwd Gebruiker

Page 43: XSD - telescript.denayer.wenk.betelescript.denayer.wenk.be/~jve/XSD.pdf · Geldige XML • Algemeen: • Welgevormd • Specifiek: • Geldig   hobo

Attributen

• Een element met een attribuut moet een samengesteld type hebben

• Een attribuut zelf moet een enkelvoudig type hebben

<xs:element name="schoen"> <xs:complexType> <xs:attribute name="maat" type="xs:integer"> </xs:complexType></xs:element>

Page 44: XSD - telescript.denayer.wenk.betelescript.denayer.wenk.be/~jve/XSD.pdf · Geldige XML • Algemeen: • Welgevormd • Specifiek: • Geldig   hobo

Attributen

<xsd:attribute name="genre" type="xsd:string" use="required" />

• Default en vaste waardes

<xsd:attribute name="genre" type="xsd:string" default="hardrock" />

<liedje> = <liedje genre="hardrock">

• Attributen zijn normaalgezien optioneel

Page 45: XSD - telescript.denayer.wenk.betelescript.denayer.wenk.be/~jve/XSD.pdf · Geldige XML • Algemeen: • Welgevormd • Specifiek: • Geldig   hobo

Groepen

<xsd:group name="aliasgroep"> <xsd:sequence> <xsd:element name="artiestennaam" type="xsd:string"/> <xsd:element name="echte-naam" minOccurs="0" type="xsd:string" /> </xsd:sequence></xsd:group>

Definiëren

Page 46: XSD - telescript.denayer.wenk.betelescript.denayer.wenk.be/~jve/XSD.pdf · Geldige XML • Algemeen: • Welgevormd • Specifiek: • Geldig   hobo

Groepen

<xsd:element name="artiest"> <xsd:sequence> <xsd:group ref="aliasgroep" /> <xsd:element name="manager" type="xsd:string" /> </xsd:sequence></xsd:element>

Gebruiken

Page 47: XSD - telescript.denayer.wenk.betelescript.denayer.wenk.be/~jve/XSD.pdf · Geldige XML • Algemeen: • Welgevormd • Specifiek: • Geldig   hobo

Uitbreidbare schema’s

• Om schema’s later te kunnen aanvullen of verschillende schema’s te combineren

<xsd:any> ipv. <xsd:element>

<xsd:anyAttribute> ipv. <xsd:attribute>