270 likes | 454 Views
XMLSchema. XMLSchema. Innledende eksempler:. 1. <?xml version="1.0" encoding="ISO-8859-1"?> 2. <not at > 3. <t il >Tove</t il > 4. <fr a >Ja n ni</f ra > 5. < tittel > Huskelapp </ tittel > 6. < melding > Ikke glem avtalen til helgen </ melding > 7. </not at>.
E N D
XMLSchema • Innledende eksempler: 1.<?xml version="1.0" encoding="ISO-8859-1"?> 2.<notat> 3.<til>Tove</til> 4.<fra>Janni</fra> 5.<tittel>Huskelapp</tittel> 6.<melding>Ikke glem avtalen til helgen</melding> 7.</notat> Vi har sett DTD’en til dette xml dok. Her kommer XMLSchema til samme dokument:
XMLSchema <?xml version="1.0"?> <xs:schemaxmlns:xs=http://www.w3.org/2001/XMLSchema xmlns="http://www.osir.hihm.no/sfi/kurs/3ip80" targetNamespace="http://www.osir.hihm.no/sfi/kurs/3ip80"> <xs:element name="notat"> <xs:complexType> <xs:sequence> <xs:element name="til" type="xs:string"/> <xs:element name=”fra" type="xs:string"/> <xs:element name=”tittel" type="xs:string"/> <xs:element name=”melding" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
XMLSchema • I eksempelet ovenfor kan en se at notater av kompleks type, fordi den inneholder flere elementer. • De andre elementene er av simple typer fordi de ikke inneholder andre elementer. • Referanse til et XMLSchema: <?xml version="1.0" encoding="ISO-8859-1"?> <notat xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="notat.xsd"> <til>Tove</til> <fra>Janni</fra> <tittel>Huskelapp</tittel> <melding>Ikke glem avtalen til helgen</melding> </notat>
XMLSchema • <schema> elementet er rot elementet i et XMLSchema. • En schema deklarasjon ser ofte slik ut: <xs:schemaxmlns:xs=http://www.w3.org/2001/XMLSchema targetNamespace =http://www.osir.hihm.no/sfi/kurs/3ip80 xmlns="http://www.osir.hihm.no/sfi/kurs/3ip80"> • Følgende linje: • xs:schemaxmlns:xs=http://www.w3.org/2001/XMLSchema • Indikerer at elementer og datatyper (schema, element, complexType, sequence, string, boolean, etc.)kommer fra http://www.w3.org/2001/XMLSchema navnerom, og at elementene og datatypene som kommer fra http://www.w3.org/2001/XMLSchema navnerommet skal ha :xs som prefiks. (denne url har til hensikt å beskrive navnerommet.)
XMLSchema • xmlns=http://www.osir.hihm.no/sfi/kurs/3ip80 • Standard navnerom • targetNamespace=http://www.osir.hihm.no/sfi/kurs/3ip80 • Indikerer at et xml dokument hvor elementene er deklarert til å tilhøre navnerommet til schemaet, skal valideres mot XMLScema.
XMLSchema • Referanse til et XMLSchema: <notat xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="notat.xsd"> • Første og andre linje: • xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xsi:schemaLocation="notat.xsd” • For å assosiere Schema med xml dokumentet. • Bruker schemaLocation for å spesifisere schema fila.
XMLSchema • Vi deklarerer elementer og definerer typer • Enkle deklarasjoner lager enkle typer. • Komplekse deklarasjoner lager komplekse typer.
XMLSchema – Enkle deklarasjoner • Dette er en enkel deklarasjon av et enkelt element: • <xs:element name="til" type="xs:string"/> • Enkle elementer inneholder kun ”tekst” • Enkle elementer inneholder ikke andre elementer eller attributter. • En enkel deklarasjon gjelder for enkle elementer. • Deklarasjonen består av element navn og en datatype: • <xs:element name=”etternavn" type="xs:string"/> • <etternavn>Olsen</etternavn> • <xs:element name=”alder" type="xs:integer"/> • <alder>35</alder> • <xs:element name=”fodt" type="xs:date"/> • <fodt>1968</fodt>
XMLSchema - komplekse deklarasjoner • Dette er en kompleks deklarasjon av et komplekst element: • <xs:element name="notat"> <xs:element name="notat"> <xs:complexType> <xs:sequence> <xs:element name="til" type="xs:string"/> <xs:element name=”fra" type="xs:string"/> <xs:element name=”tittel" type="xs:string"/> <xs:element name=”melding" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element>
XMLSchema - komplekse deklarasjoner • Komplekse elementer kan inneholde både tekst flere elementer og attributter. • Dette er f.eks et komplekst element: • <produkt pid="1345"/> • Eller dette: <element name=”ansatt”> <complexType > <sequence> <element name=”fornavn” type=”string”> <element name=”etternavn” type=”string”> </sequence> </complexType> </element> <ansatt> <fornavn>John</fornavn > <etternavn>Smith</etternavn> </ansatt>
XMLSchema - attributter • Deklarering av attributter: • <xs:attribute name="xxx" type="yyy"/> • Angir navn på attributtet og datatypen • F.eks: <etternavnspraak=”NO">Olsen</etternavn> • <xs:attribute name=”spraak" type="xs:string"/> • Standard verdier: • <xs:attribute name=”spraak" type="xs:string” default=”NO” /> • Faste verdier: • <xs:attribute name=”spraak" type="xs:string” fixed=”NO” /> • Påkrevet: • <xs:attribute name=”spraak" type="xs:string” use=”required” />
XMLSchema – simpleTypes (enkle typer) • simpleType definisjoner brukes når det skal settes begrensninger på verdier. • Noen eksempler: • Alder kan ikke være under 0 og høyere enn 100. <xs:element name=”alder"> <xs:simpleType> <xs:restriction base="xs:integer"> <xs:minInclusive value="0"/> <xs:maxInclusive value="100"/> </xs:restriction> </xs:simpleType> </xs:element>
XMLSchema – simpleTypes (enkle typer) • Eks: • Begrense tillatte verdier: <xs:element name=”bil"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="Audi"/> <xs:enumeration value="Golf"/> <xs:enumeration value="BMW"/> </xs:restriction> </xs:simpleType> </xs:element>
XMLSchema – simpleTypes (enkle typer) • Eks: • Begrense tillatte verdier ved å definere en serie: <xs:element name="initialer"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="[A-Z][A-Z][A-Z]"/> </xs:restriction> </xs:simpleType> </xs:element>
XMLSchema – simpleTypes (enkle typer) • Eks: • Begrensning på lengde: <xs:element name="passord"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:minLength value="5"/> <xs:maxLength value="8"/> </xs:restriction> </xs:simpleType> </xs:element> Link til liste av restriksjoner
XMLSchema – complexTypes(komplekse typer) • Definisjon av complekse typer gjøres ved bruk av <complexType> elementet. • Vanligvis vil <complexType> inneholde element deklarasjoner, attributt deklarasjoner og element referanser. <xs:element name="notat"> <xs:complexType> <xs:sequence> <xs:element name="til" type="xs:string"/> <xs:element name=”fra" type="xs:string"/> <xs:element name=”tittel" type="xs:string"/> <xs:element name=”melding" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element>
XMLSchema – complexTypes(komplekse typer) • Komplekse typer for tomme elementer: • <produktprodid="1345" /> <xs:element name=”produkt"> <xs:complexType> <xs:complexContent> <xs:restriction base="xs:integer"> <xs:attribute name="prodid" type="xs:positiveInteger"/> </xs:restriction> </xs:complexContent> </xs:complexType> </xs:element> • complexContent modellen signaliserer at vi ønsker å begrense eller utvide innholdsmodellen av en kompleks type. Her introduseres ingen elementer.
XMLSchema – complexTypes (komplekse typer) • Komplekse typer for simpelt innhold(husk begrep fra xml terminologi: simplelt innhold). • Hvis du skal bruke simpleContent må du definere enten en extention eller en restriction innenfor simpleContent elementet. <shoesize country="france">35</shoesize> <xs:element name="shoesize"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:integer"> <xs:attribute name="country" type="xs:string" /> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element>
XMLSchema – complexTypes (komplekse typer) • Komplekse typer med mixed innhold <letter> Dear Mr.<name>John Smith</name> Your order <orderid>1032</orderid> will be shipped on <shipdate>2001-07-13</shipdate> </letter> <xs:element name="letter"> <xs:complexType mixed="true"> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="orderid" type="xs:positiveInteger"/> <xs:element name="shipdate" type="xs:date"/> </xs:sequence> </xs:complexType> </xs:element>
XMLSchema – complexTypes (komplekse typer) • For at tekst kan forekomme mellom barn elementene må mixed være satt til true. • Vi kan også gi complexType et navn og la ”letter” elementet få et attributt som ref. til den komplekse typen. Slik kan flere elementer referere til samme complexType. <xs:element name="letter" type="lettertype"/> <xs:complexType name="lettertype" mixed="true"> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="orderid" type="xs:positiveInteger"/> <xs:element name="shipdate" type="xs:date"/> </xs:sequence> </xs:complexType>
XMLSchema – complexTypes. Indikatorer • Vi kan kontrollere hvordan elementer brukes i dokumenter, med indikatorer. • Det er sju typer indikatorer: • Som gir orden: • ANY • Choice • Sequence • Som angir ant. Forekomster: • minOccurs • maxOccurs • Som grupperer: • Group name • Attribute name
XMLSchema – complexTypes Indikatorer • All: Barn nodene kan opptre i vilkårlig rekkefølge. Hvert barn element kan kun forekomme 1 gang. • Choice: kun et av elementene innenfor en choice deklarasjon kan forekomme innenfor den ytre elementkontaineren. • Sequence: spesifiserer at elementene må være i en bestemt rekkefølge <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>
XMLSchema – complexTypes Indikatorer • maxOccur: spesifiserer hvor mange ganger et element kan forekomme. • minOccur: spesifiserer minimum antall ganger et element kan forekomme. <xs:element name="person"> <xs:complexType> <xs:sequence> <xs:element name="full_name" type="xs:string"/> <xs:element name="child_name" type="xs:string" maxOccurs="10" minOccurs="0"/> </xs:sequence> </xs:complexType> </xs:element>
XMLSchema og datatyper • XMLSchema har noen innebygde datatyper: • String: bokstav og tegn, linjeskift, mellomrom og tabulator – tegn. • Date: CCYY-MM-DD • Time: hh:mm:ss • dateTime: CCYY-MM-DDThh:mm.ss • Boolean: true/false • Binary: • base64Binary (Base64-encoded binary data) • hexBinary (hexadecimal-encoded binary data)
XMLSchema og datatyper. Eks: • <xs:element name="start" type="xs:date"/> • <start>2002-09-24</start> • <xs:element name="start" type="xs:time"/> • <start>09:30:10.5</start> • <xs:element name="startdato" type="xs:dateTime"/> • <startdato>2002-05-30T09:30:10.5</startdato> • <xs:element name=”kunde" type="xs:string"/> • <customer> John Smith </customer> • <xs:attribute name="disabled" type="xs:boolean"/> • <prize disabled="true">999</prize>
Oppsummering • Alle XML schema består av komponenter, hovedsakelig elementer, attributter og type definisjoner. • Når alt kommer til alt er kanskje ikke XMLSchema så vanskelig. • XMLSchema er overlegen i detalj i forhold til DTD