Page 1

XML Schema

XML Schema Copyright © Lund & Bendsen A/S

1

XML Schema • • • • • • • •

Hvad er W3C XML Schema og hvad skal vi med det? Grundelementerne i et XML Schema Overblik over datatyper i XML Schema Built in simple types i XML Schema Restriction af simple types vha. facets Konstruktion af nye simple types Konstruktion af complex types Best practices

XML Schema Copyright © Lund & Bendsen A/S

2


Hvad er et schema? • Et schema definerer en XML-applikation / et XML markup language. • Et schema er for et XML-dokument, hvad en Java-klasse er for et Java-objekt. • Et schema beskriver hvilke elementer og attributter man kan bruge i et XML-dokument, samt hvordan elementernes rækkefølge må være, og hvordan elementerne indlejres i hinanden, samt hvilken datatype de har. • Et schema kan siges at være en kontrakt med den der producerer XML-dokumentet og den der indlæser og behandler det. • Et schema gemmes i en fil med suffix’et *.xsd XML Schema Copyright © Lund & Bendsen A/S

3

Et eksempel på et schema Dette Schema definerer en struktur for adresse-elementer... <?xml version="1.0" encoding="UTF-8"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://lundogbendsen.dk/schemas/2004/08/02/Address"> <element name="address"> <complexType> <sequence> <element name="street" type="string"/> <element name="zip" type="string"/> <element name="city" type="string"/> </sequence> </complexType> </element> <?xml version="1.0" encoding="UTF-8"?> </schema> <address xmlns="http://lundogbendsen.dk/schemas/2004/08/02/Address"> <street>Vesterbrogade</street> <zip>1716</zip> Dette XML-dokument <city>København V</city> er validt ift. skemaet: </address> XML Schema Copyright © Lund & Bendsen A/S

4


XML Schema • • • • • • • •

Hvad er W3C XML Schema og hvad skal vi med det? Grundelementerne i et XML Schema Overblik over datatyper i XML Schema Built in simple types i XML Schema Restriction af simple types vha. facets Konstruktion af nye simple types Konstruktion af complex types Best practices

XML Schema Copyright © Lund & Bendsen A/S

5

Om schemas • Et schema har altid <schema> som sit root-element • <schema>-elementet har altid en attribut kaldet targetNamespace, der angiver hvilket namespace det er schema’et definerer • Direkte nested i <schema>-elementet findes globale type-, globale element- og globale attribut-erklæringer • Når man laver et nyt schema, er det i virkeligheden et XMLdokument, som følger et schema, som er defineret i XML Schema-specifikationen (dette schema har namespace’et: http://www.w3.org/2001/XMLSchema)

XML Schema Copyright © Lund & Bendsen A/S

6


Associering af XML doc til et Schema • For at validere et XML dokument mod et Schema skal man associere dokumentet med Schema’et. <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://lundogbendsen.dk/order" targetNamespace="http://lundogbendsen.dk/order"> … </xs:schema>

<?xml version="1.0" encoding="UTF-8"?> Namespace (stemmer overens) <order xmlns=“ http://lundogbendsen.dk/order " xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=“ http://lundogbendsen.dk/order order.xsd "> ... </order> Mellemrum

Fysisk fil

XML Schema Copyright © Lund & Bendsen A/S

7

XML Schema • • • • • • • •

Hvad er W3C XML Schema og hvad skal vi med det? Grundelementerne i et XML Schema Overblik over datatyper i XML Schema Built in simple types i XML Schema Restriction af simple types vha. facets Konstruktion af nye simple types Konstruktion af complex types Best practices

XML Schema Copyright © Lund & Bendsen A/S

8


Typer i XML Schema • Når man i et schema angiver et nyt element eller en ny attribut skal man også angive hvilken type elementet/attributten har. • XML Schema har en række indbyggede simple typer man kan bruge (fx string og int) • Desuden kan man i et schema selv definere nye datatyper, som kan være enten: – anonyme typer (erklæres hvor de bruges, og kan ikke bruges andre steder), eller – navngivne typer (som også kan bruges andre steder) XML Schema

9

Copyright © Lund & Bendsen A/S

Anvendelse af navngivne typer • Når man ønsker at angive en type for et element eller en attribut i et schema, skal man referere den med dets QName – dvs. både namespace (vha. prefix) og dens local name / element name. • Typer erklæret i schema’et selv tilhører schema’ets target namespace, og derfor skal disse typer refereres med et prefix, der refererer target namespace’et selv. • Man definerer derfor ofte et prefix kaldet tns som peger på samme namespace som targetNamespace attributten. XML Schema Copyright © Lund & Bendsen A/S

10


Datatyper i XML Schema XML Schema definerer to grundlæggende kategorier af datatyper: – simple types: minder om Javas primitive typer, fx string og int. De kan bruges til at angive en type for et element eller en attribut. – complex types: minder lidt om klasser i Java, idet de er opbygget af andre typer. Kun elementer kan være complex types. En complex type kan bestå af simple types og/eller af andre complex types. XML Schema Copyright © Lund & Bendsen A/S

11

Et eksempel på simpleType <?xml version="1.0" encoding="UTF-8"?> <schema targetNamespace="http://lundogbendsen.dk/schemas/2004/08/02/Person" xmlns="http://www.w3.org/2001/XMLSchema"> <element name=“name"> <simpleType> <restriction base="string"> <minLength value="4"/> <maxLength value="50"/> </restriction> </simpleType> </element> <?xml version="1.0" encoding="UTF-8"?> <person xmlns="http://lundogbendsen.dk/schemas/2004/08/02/Person"> <name>Peter Jensen</name> ... </person> XML Schema Copyright © Lund & Bendsen A/S

12


Et eksempel på complexType <?xml version="1.0" encoding="UTF-8"?> <schema targetNamespace="..." xmlns:tns="..." > <complexType name="AddressType"> <sequence> <element name="street" type="string"/> <element name="zip" type="string"/> <element name="city" type="string"/> </sequence> </complexType> <element name="Person"> <complexType> <sequence> <element name="name" type=“string"/> <element name="address" type="tns:AddressType"/> </sequence> </complexType> </element> </schema>

<?xml version="1.0" encoding="UTF-8"?> <person xmlns="..."> <name>Peter Jensen</name> <address> <street>Reventlowsgade 18</street> <zip>1651</zip> <city>København v</city> </address> </person>

XML Schema Copyright © Lund & Bendsen A/S

13

Type-terminologi 1/3 • Global / named types: defineres direkte under <schema>-elementet. Man skal give dem et navn, hvorfor de kan refereres andre steder fra – dvs. man kan lave flere elementer og/eller attributter, der alle har netop denne type. • Local / anonymous types: defineres som en del af et element eller en attribut. De kan ikke have et navn, hvormed typen ikke kan genbruges andre steder (man kan jo ikke referere den vha. et navn) XML Schema Copyright © Lund & Bendsen A/S

14


Type-terminologi 2/3 • Simple types: definerer et element eller en attribut, som ikke kan indeholde elementer og attributter som værdi, men som derimod har en værdi som ”hej” eller 12. XML Schema definerer en række simple types (kaldes built-in simple types), som er i XML Schema namespace’et – fx string og int. • Complex types: definerer et element, som kan have child-elementer og attributter. XML Schema har ingen prædefinerede complex types. XML Schema

15

Copyright © Lund & Bendsen A/S

Type-terminologi 3/3 Simple types

Complex types

Local / anonymous types

(1) Local simple / anonymous simple

(3) Local complex / anonymous complex

Global / named types

(2) Global simple / named simple

(4) Global complex / named complex

NB: Det er ikke tilladt at give et navn til en local type (dvs. en nested). XML Schema Copyright © Lund & Bendsen A/S

16


Local complex / anonymous complex type 1) 2)

Alle elementer og attributter i dette XML-dokument hører til namespacet for XML Schema Schema’et definerer reglerne for dokument-instanser i det angivne target namespace

<schema xmlns="http://www.w3.org/2001/XMLSchema” 1 targetNamespace="http://lundogbendsen.dk/schemas/2004/08/02/Address" 2 <element name=”address"> <complexType> En anonym (dvs. en <sequence> unavngiven) type, som <element name="street" type="string"/> ikke kan bruges andre <element name="zip" type="string"/> steder end til definition <element name="city" type="string"/> af Address-elementets </sequence> type. </complexType> </element> </schema> XML Schema Copyright © Lund & Bendsen A/S

17

Global complex / named complex type 1) 2) 3)

Alle elementer og attributter i dette XML-dokument hører til namespacet for XML Schema Schema’et definerer reglerne for dokument-instanser i det angivne target namespace Vi angiver addr som prefix for samme namespace som target namespace’et

<schema xmlns="http://www.w3.org/2001/XMLSchema” 1 targetNamespace="http://lundogbendsen.dk/schemas/2004/08/02/Address" 2 xmlns:addr="http://lundogbendsen.dk/schemas/2004/08/02/Address"> <element name=”address" type="addr:AddressType"/> 3 <complexType name="AddressType"> Er af typen AddressType, <sequence> En navngiven type som er erklæret i dette <element name="street" type="string"/> dokument, og som der<element name="zip" type="string"/> for hører til namespacet, <element name="city" type="string"/> som addr er prefix for. </sequence> </complexType> </schema> XML Schema Copyright © Lund & Bendsen A/S

18


Typer i XML Schema • Datatyper i XML Schema har: – et værdi-rum (value space), som er den mængde af værdier de kan holde – en syntaks, som angiver hvilket format disse værdier kan angives med (der er flere tilfælde, hvor samme værdi kan udtrykkes med flere forskellige syntakser) – typer der har flere syntakser, har også en kanonisk repræsentation (fx relevant ved digitale signaturer) – typer kan have facetter (måder hvorpå man kan indskrænke en afledte type på)

• Typen anySimpleType er en abstrakt base-type for alle simple typer • Typen anyType er abstrakt base-type for alle andre typer, både complex types og simple types XML Schema Copyright © Lund & Bendsen A/S

19

Typehierarkiet i XML Schema 1/2 • Alle indbyggede simple types, og alle afledte simple types er subtyper af typen anySimpleType. • Alle complex types og anySimpleType er subtyper af anyType. Dvs. anyType er supertype for alle andre typer i XML Schema (ligesom Object er det i Java) XML Schema Copyright © Lund & Bendsen A/S

20


Typehierarkiet i XML Schema 2/2

XML Schema Copyright © Lund & Bendsen A/S

21

XML Schema • • • • • • • •

Hvad er W3C XML Schema og hvad skal vi med det? Grundelementerne i et XML Schema Overblik over datatyper i XML Schema Built in simple types i XML Schema Restriction af simple types vha. facets Konstruktion af nye simple types Konstruktion af complex types Best practices

XML Schema Copyright © Lund & Bendsen A/S

22


Built-in simple types: Tekst • • • • • • •

string: En tekststreng – alle tegn er lovlige. normalizedString: En tekst, hvor det eneste forekommende whitespacetegn er mellemrum (#x20). I teksten må der således ikke være nogen carriage returns (#xD), ingen line feeds (#xA) og heller ingen tabs (#x9 ). token: Som normalizedString, idet mellemrum i begyndelsen og slutningen af strengen er ulovlige, og der må heller ikke forefindes to mellemrum i streg. language: Repræsenterer sprogkoder jf. RFC1766. Fx ’de’, ’fr’, ’en’, ’en-GB’ og ’en-US’. Name: Repræsenterer XML-navne – dvs. navne, der er lovlige at bruge til elementer og attributter i XML – fx ’Age’, ’first-name’ og ’prs:Age’. QName: Qualified xml name prefix’et med et namespace. Fx ’p:age’ eller ’xsd:int’. Bruges til elementer og attributter i XML, hvor der bruges namespaces. NCName: Non-colonized xml name. Svarer til det lokale navn i et QName, dvs. når prefix’et og kolonet er pillet væk – fx ’Name’ – men ikke ’person:Name’. XML Schema Copyright © Lund & Bendsen A/S

23

Built-in simple types: Tal • • • • • • • • • • • • • • •

float og double: IEEE 32 bit hhv. 64 bit kommatal. Har desuden -0, +0, INF, -INF (infinity), NaN (not a number). Kan skrives med scientific notation. Fx: 123.456 +1234.456 -1.2344e56 -.45E-6 decimal: Arbitrært store decimaltal. Som komma anvendes altid ’.’. Må prefixes med + eller -. integer: Arbitrært store heltal. Må prefixes med + eller -. nonPositiveInteger: Arbitrært stort heltal, som er enten et negativt tal eller 0. negativeInteger: Arbitrært stort heltal, som er negativt (dvs. må ikke være 0). nonNegativeInteger: Arbitrært stort heltal, som er enten et positivt tal eller 0. positiveInteger: Arbitrært stort heltal som er positivt (dvs. må ikke være 0) long: 64bit heltal – dvs. mellem -9223372036854775808 og 9223372036854775807 int: 32bit heltal – dvs. mellem -2147483648 og 2147483647 short: 16bit heltal – dvs. mellem -32768 og 32767 byte: 8bit heltal – dvs. mellem -128 og 127 unsignedLong: 64bit positivt heltal – dvs. mellem 0 og 18446744073709551615 unsignedInt: 32bit positivt heltal – dvs. mellem 0 og 4294967295 unsignedShort: 16bit positivt heltal – dvs. mellem 0 og 65535 unsignedByte: 8bit positivt heltal – dvs. mellem 0 og 255 XML Schema Copyright © Lund & Bendsen A/S

24


Built-in simple types: Dato og tid •

date: CCYY-MM-DD (CC er century): Kan evt. afsluttes med Z, hvilket indikerer datoen er angivet i Coordinated Universal Time. Eller kan afsluttes med + eller – efterfulg hh:mm, hvilket angiver offset fra UTC (:mm kan udelades). Eksempler: <date>2001-02-13</date> og <date>2001-0213+01:00</date> (central-europæisk tid) dateTime: CCYY-MM-DDThh:mm:ss.sss (som date, idet sss er millisekunder). Kan som date afsluttes med Z eller + eller –. Må prefix’es med –. duration: PnYnMnDTnHnMnS (n er et tal, P skal altid med, T er dato-tids-separator-tegn (skal udelades hvis timer/min/sek ikke bruges). Fx: <duration>P1Y2M4D</duration>, <duration>P1Y2M4DT0H0M0S</duration>, <duration>P0Y0M0DT1H2M4S</duration> og <duration>PT1H2M4S</duration> gDay: ---DD (må bruge Z eller + eller – ligesom date). Én dag, der gentager sig hver måned. Fx <day>---13</day> gMonth: --MM-- (må bruge Z eller + eller – ligesom date). Én måned, der gentager sig hvert år. Fx <month>--02--</month>, <month>--02---05:00</month> og <month>--02--+01:00</month> gMonthDay: --MM-DD (må bruge Z eller + eller – ligesom date). Én dag, der gentager sig hvert år. Fx <monthDay>--02-13</monthDay>. gYear: CCYY (CC er century). Kan evt. prefix’es med –. gYearMonth: CCYY-MM (må bruge Z eller + eller – ligesom date). Fx <month>2001-02+01:00</month>. time: hh:mm:ss:sss (sss er millisekunder og må bruge Z eller + eller – ligesom date). Et tidspunkt, der forekommer hver dag.

• •

• • • • • •

XML Schema Copyright © Lund & Bendsen A/S

25

Built-in simple types: XML1.0-typer • • • • • • • •

ID*: Værdien der angives skal være unik i hele XML-dokumentet. IDREF*: Skal have samme værdi som en ID-attribut i dokumentet. IDREFS*: En space-adskilt liste IDREF’er. ENTITY*: Navnet på et element i dette XML-dokument. ENTITIES*: Space-adskilt liste af elementer, som optræder i dette XML-dokument. NMTOKEN: NMTOKEN: NOTATION:

*) Bør kun bruges som type for attributter – ikke til elementers type.

XML Schema Copyright © Lund & Bendsen A/S

26


Built-in simple types: Diverse • • • • •

string: En tekststreng – alle tegn er lovlige. anyUri: Fx href='http://example.org/People' base64Binary: Fx AQIDBQcJCw0REwAA boolean: Kan antage én af flg. værdier: true, false, 1 eller 0 hexBinary: Fx 0102030507090B0D1113

XML Schema Copyright © Lund & Bendsen A/S

27

XML Schema • • • • • • • •

Hvad er W3C XML Schema og hvad skal vi med det? Grundelementerne i et XML Schema Overblik over datatyper i XML Schema Built in simple types i XML Schema Restriction af simple types vha. facets Konstruktion af nye simple types Konstruktion af complex types Best practices

XML Schema Copyright © Lund & Bendsen A/S

28


Hvad er facets? • Facets bruges til at indsnævre en afledt types værdisæt set i forhold til dens basetype • Hvis man bruger flere facets på samme type vil typen blive indsnævret af dem alle • Der er 12 forskellige typer af facets: – De har alle en krævet value-attribut – De kan have en fixed-attribut (ved true betyder det typen ikke kan omdefineres) – De kan have en id-attribut (til app-specifikke formål) XML Schema Copyright © Lund & Bendsen A/S

29

Facet 1 af 12: enumeration Facet’en enumeration angiver en liste af lovlige værdier. Attributten value er af typen string. Eksemplet viser en type kaldet smallprimes, som er subtype af integer. Værdisættet for typen er 2, 3, 5 eller 7. <xs:simpleType name='smallprimes' > <xs:restriction base='xs:integer' > <xs:enumeration value='2' /> <xs:enumeration value='3' /> <xs:enumeration value='5' /> <xs:enumeration value='7' /> </xs:restriction> </xs:simpleType>

typens navn basetype (arver fra...)

XML Schema Copyright © Lund & Bendsen A/S

30


Facet 2 af 12: totalDigits Facet’en totalDigits angiver det maksimale antal decimaler i alt. Attributten value er af typen positiveInteger. Eksemplet viser et kommatal, som max må have 5 decimaler i alt – fx er 234 og 34.123 lovlige, mens 2345.1234 er ulovlig. <xs:simpleType name=’dec5' > <xs:restriction base='xs:decimal' > <xs:totalDigits value='5' /> </xs:restriction> </xs:simpleType> XML Schema Copyright © Lund & Bendsen A/S

31

Facet 3 af 12: fractionDigits Facet’en fractionDigits angiver det maksimale antal decimaler efter kommaet (til højre for kommaet). Attributten value er af typen positiveInteger. Eksemplet viser et kommatal, som max må have 2 decimaler efter kommaet – fx er 234 og 3434.12 lovlige, mens 2345.123 er ulovlig. <xs:simpleType name=’dk_currency' > <xs:restriction base='xs:decimal' > <xs:fractionDigits value=’2' /> </xs:restriction> </xs:simpleType> XML Schema Copyright © Lund & Bendsen A/S

32


Facet 4-6 af 12: længder Facet’en length angiver det eksakte antal tegn i en string, octets i en binær, eller elementer i en liste. Facet’erne minLenght og maxLengh sætter nedre og øvre grænser fremfor et absolut krav om længde. Attributten value er af typen positiveInteger. Eksemplet tv. viser en string, som skal have præcis 3 tegn. Fx er RL og VL ok, men O er ikke. Eksemplet th. viser en liste på 10 kommatal – fx ’1 2 3 4 5 6 7 8 9 0” (bemærk listens elementer er adskilt med mellemrum / spaces) <simpleType name="initialsType"> <restriction base="token"> <minLength value="2"/> <maxLength value="4"/> </restriction> </simpleType>

<xs:simpleType name=‘listOf10DoublesType' > <xs:restriction> <xs:simpleType> <xs:list itemType='xs:double' /> </xs:simpleType> <xs:length value='10' /> </xs:restriction> </xs:simpleType> XML Schema Copyright © Lund & Bendsen A/S

33

Facet 8-10 af 12: min/max værdier De følgende 4 facet’er angiver alle en øvre eller en nedre grænse. For dem alle gælder at value er af typen number. • • • •

maxExclusive: øvre værdi-grænse for værdi-sættet (<maxExclusive) maxInclusive: øvre værdi-grænse for værdi-sættet (<=maxInclusive) minExclusive: øvre værdi-grænse for værdi-sættet (>minExclusive) minInclusive: øvre værdi-grænse for værdi-sættet (>=minInclusive)

<xs:simpleType name=’opTil999Type' > <xs:restriction base='xs:decimal' > <xs:maxExclusive value='1000' /> </xs:restriction> </xs:simpleType>

<xs:simpleType name=’ikkeNovEllerDec' > <xs:restriction base='xs:gMonth' > <xs:maxExclusive value='--11--' /> </xs:restriction> </xs:simpleType> XML Schema Copyright © Lund & Bendsen A/S

34


Facet 11 af 12: pattern Facet’en pattern angiver et regulært udtryk, som strengen skal matche. Attributten value er af typen string. Eksemplet viser en pattern, som starter med to bogstaver efterfulgt af 4 decimaler – fx KB1121. <xs:simpleType name='code' > <xs:restriction base='string' > <xs:pattern value='[A-Z]{2}\d{4}' /> </xs:restriction> </xs:simpleType> XML Schema Copyright © Lund & Bendsen A/S

35

Facet 12 af 12: whitespace Facet’en whitespace angiver regler for normalisering af whitespaces i en string. Attributten value skal have én af følgende tre værdier: preserve, replace eller collapse.

XML Schema Copyright © Lund & Bendsen A/S

36


Hvor kan hvilke facets bruges 1/4 • Der er begrænsninger på hvilke simple datatyper de 12 facets kan bruges på. • Fx giver det ikke mening at bruge maxExclusive på en string. • De efterfølgende 3 slides viser for hver af de 12 facets, på hvilke simple datatyper den givne facet kan bruges. XML Schema Copyright © Lund & Bendsen A/S

37

Hvor kan hvilke facets bruges 2/4

XML Schema Copyright © Lund & Bendsen A/S

38


Hvor kan hvilke facets bruges 3/4

XML Schema Copyright Š Lund & Bendsen A/S

39

Hvor kan hvilke facets bruges 4/4

XML Schema Copyright Š Lund & Bendsen A/S

40


XML Schema • • • • • • • •

Hvad er W3C XML Schema og hvad skal vi med det? Grundelementerne i et XML Schema Overblik over datatyper i XML Schema Built in simple types i XML Schema Restriction af simple types vha. facets Konstruktion af nye simple types Konstruktion af complex types Best practices

XML Schema Copyright © Lund & Bendsen A/S

41

Konstruktion af nye simple types • Man kan selv definere nye simple typer udfra de prædefinerede simple typer. • Man kan begrænse (restrict’e) eksisterende simple types vha. facets • Man kan lave en space-separeret liste af eksisterende simple types (list) • Man kan lave foreningsmængder af eksisterende typer (union) XML Schema Copyright © Lund & Bendsen A/S

42


Definition af nye simple types • Man kan definere en ny simpleType, hvilket gøres ved at lave et element kaldet <simpleType>. – Elementet <simpleType> kan enten erklæres direkte som child under <schema>-elementet (kaldes en global / named type) – Eller elementet <simpleType> kan erklæres som child af en element- eller attribut-erklæring (kaldes en lokal / unnamed type)

• Elementet <simpleType> kan have følgende atributter: – id (af typen ID) – final (={restriction|list|union|#all}): Simple typer, der afledes af denne simpleType vha. den angivne mekanisme er ikke tilladt. – name (af typen NCName): der kan ikke være to global typer i samme name space med det samme navn, og lokale typer må ikke gives et navn.

• Elementet <simpleType> kan have følgende child-elementer. – <annotation>, som bruges til dokumentation – <list> eller <restriction> eller <union> (uddybes i det efterfølgende)

XML Schema Copyright © Lund & Bendsen A/S

43

<restriction> (child af simpleType) Elementet <restriction>: – er altid child i et <simpletype>-element – kan have attributten id (af typen ID) – har attributten base af typen QName, der angiver hvilken simple type den er baseret på – kan dokumenteres ved at give den et <annotation>- elementet som child – kan have en eller flere facet-elementer som begrænser dens værdirum. <xs:simpleType name='CelciusType' > <xs:restriction base='xs:decimal'> <xs:minExclusive value='-273' /> </xs:restriction> </xs:simpleType> XML Schema Copyright © Lund & Bendsen A/S

44


<list> (child af simpleType) Elementet <list>: – er altid child i et <simpletype>-element – angiver en whitespace-separeret liste af simple type-værdier – elementtypen i listen kan angives på en af flg. to måder: • en attribut kaldet itemType af typen Qname (navnet på en global primitiv type) • et nested simpleType-element

– kan dokumenteres ved at give den et <annotation>- elementet som child

<xs:simpleType name='listOfNumbers' > <xs:list itemType='xs:decimal' /> </xs:simpleType>

<xs:simpleType name=‘listOf10DoublesType' > <xs:restriction> <xs:simpleType> <xs:list itemType='xs:double' /> </xs:simpleType> <xs:length value='10' /> </xs:restriction> </xs:simpleType> XML Schema Copyright © Lund & Bendsen A/S

45

<union> (child af simpleType) Elementet <union>: • • •

er altid child i et <simpletype>-element angiver at typens værdisæt er foreningsmængden mellem to eller flere eksisterende simpleTypes elementtyperne kan angives på følgende to måder (evt. som en blanding): – Som en space-adskilt liste af Qnames i attributten memberTypes – Som 1+ child-elementer af typen simpleType

tillader: -0 - alle positive tal - unbounded

<xs:simpleType name="allNNI"> <xs:union memberTypes="xs:nonNegativeInteger"> <xs:simpleType> <xs:restriction base="xs:NMTOKEN"> <xs:enumeration value="unbounded"/> </xs:restriction> </xs:simpleType> </xs:union> </xs:simpleType> XML Schema Copyright © Lund & Bendsen A/S

46


XML Schema • • • • • • • •

Hvad er W3C XML Schema og hvad skal vi med det? Grundelementerne i et XML Schema Overblik over datatyper i XML Schema Built in simple types i XML Schema Restriction af simple types vha. facets Konstruktion af nye simple types Konstruktion af complex types Best practices

XML Schema Copyright © Lund & Bendsen A/S

47

Complex types • Et schema kan erklære complex types, som angiver hvordan et element kan indeholde andre elementer, og hvordan disse er organiseret • En complex type minder om en Java-klasse, der kun består af felter – dvs., der er uden metoder. • Kun elementer (og ikke attributter) kan have complex types som deres datatype • Erklæringen af en complex type angiver hvilke elementer den kan indeholde, hvor mange af hver, i hvilken rækkefølge de står og hvilken datatype hvert af disse elementer har (kan enten være simple types eller complex types) • En complex type kan også angive hvilke attributter typen kan have. XML Schema Copyright © Lund & Bendsen A/S

48


Elementer og attributter har navn og type Et element kan have en simpleType eller en complexType som sin datatype.

En attribut kan kun have en simpleType som sin datatype.

Elementer og attributter kan have en navngiven type som datatype ved at referere til typens navn. <element name="name" type="name-of-simpleType" /> <element name="name"> <simpleType>...</simpleType> </element> <element name="name" type="name-of-complexType" /> <element name="name"> <complexType>...</complexType> </element> <attribute name="name" type="name-of-simpleType"/> <attribute name="name"> <simpleType>...</simpleType> Elementer og attributter kan erklære deres </attribute> egen lokale datatype, som er unavngivne og som derfor ikke kan bruges andre steder. XML Schema Copyright © Lund & Bendsen A/S

49

Element deklarationer • Et element deklareres med et navn og en type: Global/named type <element name="person" type="PersonType" /> <complexType name="PersonType"> <sequence> <element name="firstName" type="string" /> <element name="lastName" type="string" /> </sequence> </complexType>

Local/anonymous type <element name="person"> <complexType> <sequence> <element name="firstName" type="string" /> <element name="lastName" type="string" /> </sequence> </complexType> </element>

XML Schema Copyright © Lund & Bendsen A/S

50


Model groups • I erklæringen af en complex type anvendes såkaldte model groups som angiver hvilke elementer den kan indeholde, hvor mange af hver og i hvilken rækkefølge. En complex type skal starte med en af følgende: – <sequence> – <choice> – <all>

• Man kan begrænse antallet af forekomster med attributterne: – minOccurs og maxOccurs XML Schema

51

Copyright © Lund & Bendsen A/S

<sequence> • Alle elementer deklareret i <sequence> skal forekomme i den rækkefølge de står skrevet i: <element name="person"> <complexType> <sequence> <element name="firstName" type="string" /> <element name="lastName" type="string" /> </sequence> </complexType> </element>

<person> <firstName>Ole</firstName> <lastName>Jensen</lastName> </person>



<person> <lastName>Jensen</lastName> <firstName>Ole</firstName> </person>



XML Schema Copyright © Lund & Bendsen A/S

52


<choice> • Kun én af elementerne deklareret i <choice> må forekomme:

<element name="person"> <complexType> <choice> <element name="student" type="StudentType" /> <element name="teacher" type="TeacherType" /> </choice> </complexType> </element>

<person> <student> … </student> </person>

<person> <student> … </student> <teacher> … </teacher> </person>

 

XML Schema

53

Copyright © Lund & Bendsen A/S

<all> • Alle elementer deklareret i <all> skal forekomme, dog i vilkårlig rækkefølge: <person> <age>33</age> <height>178 cm</height> </person> <element name="person"> <complexType> <all> <element name="age" type="integer" /> <element name="height" type="string" /> </all> </complexType> </element>

<person> <height>178 cm</height> <age>33</age> </person>

<person> <age>33</age> </person>

XML Schema Copyright © Lund & Bendsen A/S

  54


Begrænsning af forekomster • Man kan begrænse antal forekomster af et element med minOccurs og maxOccurs: <sequence> <element name="firstName" type="string" /> <element name="lastName" type="string" /> <element name="age" type="integer" minOccurs="0" /> </sequence>

age behøver ikke forekomme (optional)

<element name="orderLines"> <complexType> <sequence> <element name="orderLine" type="OrderLineType" minOccurs="1" maxOccurs="unbounded" /> </sequence> </complexType> </element>

<orderLines> <orderLine>…</orderLine> <orderLine>…</orderLine> <orderLine>…</orderLine> </orderLines>

En eller flere forekomster (1..x)

XML Schema Copyright © Lund & Bendsen A/S

55

Mange muligheder • Man kan f.eks. kombinere <sequence> og <choice> for at definere mere komplekse strukturer. • minOccurs og maxOccurs kan bruges på mange måder og på andet end elementer. • Der er generelt mange måder at gøre tingene på i XML Schema. • Vi har kun kigget på få centrale features - der er mange flere og det kan hurtigt blive meget komplekst! XML Schema Copyright © Lund & Bendsen A/S

56


XML Schema • • • • • • • •

Hvad er W3C XML Schema og hvad skal vi med det? Grundelementerne i et XML Schema Overblik over datatyper i XML Schema Built in simple types i XML Schema Restriction af simple types vha. facets Konstruktion af nye simple types Konstruktion af complex types Best practices

XML Schema Copyright © Lund & Bendsen A/S

57

Konventioner for XML Schemas • Elementer navngives med camel-case (fx shopCustomer) • Attributter navngives med camel-case (fx firstName) • Brug prefix’et xs til URI’en http://www.w3.org/2001/XMLSchema • Brug prefix’et tns til targetNamespace • Forsøg at undgå brugen af anonyme (lokale) typer • Forsøg at undgå at bruge globale attributter • Forsøg kun at have ét globalt element i hvert Schema (da det er ikke muligt at angive hvilket element blandt flere globale elementer, der skal bruges som root i XML-dokumenter) • Globale komplekse/simple typer navngives som regel med suffix’et ”Type” f.eks. ”AddressType” XML Schema Copyright © Lund & Bendsen A/S

58

02 - XML Schema  

2 1 XML Schema XML Schema Copyright © Lund &amp; Bendsen A/S Copyright © Lund &amp; Bendsen A/S