XML Schemas

50 %
50 %
Information about XML Schemas

Published on November 1, 2007

Author: bjornh

Source: slideshare.net

Description

XML Schemas

XML Schemas Som DTD fast bättre (och svårare)

Vad är XML Schemas XML Schemas gör samma sak som DTDer fast bättre dvs med XML Schemas går det att definiera XML-vokabulärer och det går att validera instansdokument mot dessa schemas. XML Schemas är en W3C-rekommendation sedan 2001-05-02.

XML Schemas gör samma sak som DTDer fast bättre dvs med XML Schemas går det att definiera XML-vokabulärer och det går att validera instansdokument mot dessa schemas.

XML Schemas är en W3C-rekommendation sedan 2001-05-02.

Varför XML Schemas Har bra stöd för datatyper (int, date, regulära uttryck, egendefinierade datatyper, listor mm). Har visst stöd för ”objektorientering” (arv och abstrakta element). Möjliggör kontextberoende elementnamn. Tillåter bättre repetitionsmöjigheter än +,* och ? Definierad både som DTD och XML Schema.

Har bra stöd för datatyper (int, date, regulära uttryck, egendefinierade datatyper, listor mm).

Har visst stöd för ”objektorientering” (arv och abstrakta element).

Möjliggör kontextberoende elementnamn.

Tillåter bättre repetitionsmöjigheter än +,* och ?

Definierad både som DTD och XML Schema.

Namespace XML Schemas har namespacen http://www.w3.org/2001/XMLSchema Prefixet brukar vara xsd (XML Schema Definition)

XML Schemas har namespacen http://www.w3.org/2001/XMLSchema

Prefixet brukar vara xsd (XML Schema Definition)

Simple Types vs Complex Types Som nämndes i DTD-föreläsningen: Ett element kan antingen ha ”Simple Content” eller ”Complex Content”. Innehållet kallas för ”content model”. Simple Content är innehåll som inte innehåller andra element eller attribut. Exempel är string, date, int, duration. Attribut innehåller Simple Content. Complex Content är innehåll som innehåller andra element.

Som nämndes i DTD-föreläsningen: Ett element kan antingen ha ”Simple Content” eller ”Complex Content”. Innehållet kallas för ”content model”.

Simple Content är innehåll som inte innehåller andra element eller attribut. Exempel är string, date, int, duration. Attribut innehåller Simple Content.

Complex Content är innehåll som innehåller andra element.

Simple Types vs Complex Types (2) Alla element har en ”type” som anger dess ”content model”. Det finns ett antal fördefinierade ”simple types”, t.ex. xsd:string och xsd:int . Det går dock att definiera egna simple types, t.ex. heltal mellan 17 och 4711. Görs med xsd:simpleType Alla complex types måste definieras med xsd:complexType

Alla element har en ”type” som anger dess ”content model”.

Det finns ett antal fördefinierade ”simple types”, t.ex. xsd:string och xsd:int .

Det går dock att definiera egna simple types, t.ex. heltal mellan 17 och 4711. Görs med xsd:simpleType

Alla complex types måste definieras med xsd:complexType

Några fördefinierade datatyper (simpleTypes) xsd:string xsd:int xsd:positiveInteger xsd:short xsd:double xsd:boolean xsd:dateTime xsd:duration xsd:name xsd:Qname xsd:anyuri xsd:language xsd:id xsd:idref xsd:idrefs xsd:NMTOKEN

xsd:string

xsd:int

xsd:positiveInteger

xsd:short

xsd:double

xsd:boolean

xsd:dateTime

xsd:duration

xsd:name

xsd:Qname

xsd:anyuri

xsd:language

xsd:id

xsd:idref

xsd:idrefs

xsd:NMTOKEN

Exempel <xsd:simpleType name=”positiveFloat”> <xsd:restriction base=”xsd:float”> <xsd:minExclusive value=”0”/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name=”myBoolean”> <xsd:restriction base=”xsd:string”> <xsd:enumeration value=”true”/> <xsd:enumeration value=”false”/> </xsd:restriction> </xsd:simpleType> Typdeklarationer simpleType Nya datatyper kan skapas med xsd:simpleType. Dessa är alltid begränsningar av en existerande datatyp. Begränsningarna kallas ”facets”. Olika datatyper tillåter olika facets. Facets

Exempel

<xsd:simpleType name=”positiveFloat”>

<xsd:restriction base=”xsd:float”>

<xsd:minExclusive value=”0”/>

</xsd:restriction>

</xsd:simpleType>

<xsd:simpleType name=”myBoolean”>

<xsd:restriction base=”xsd:string”>

<xsd:enumeration value=”true”/>

<xsd:enumeration value=”false”/>

</xsd:restriction>

</xsd:simpleType>

Nya datatyper kan skapas med xsd:simpleType.

Dessa är alltid begränsningar av en existerande datatyp.

Begränsningarna kallas ”facets”. Olika datatyper tillåter olika facets.

Listor (simpleType) NMTOKENS kan användas för listor. För att skapa mer restriktiva listor, t.ex. listor av positiva flyttal, kan xsd:list användas Exempel <xsd:simpleType name=”integerList”> <xsd:list itemType name=”xsd:int”/> </xsd:simpleType>

NMTOKENS kan användas för listor.

För att skapa mer restriktiva listor, t.ex. listor av positiva flyttal, kan xsd:list användas

Exempel

<xsd:simpleType name=”integerList”>

<xsd:list itemType name=”xsd:int”/>

</xsd:simpleType>

Regular Expressions (simpleType) Godtyckliga ”regular expressions” kan skapas genom att använda en facet som heter pattern som begränsning på en sträng. Exempel <xsd:simpleType name=”registrationPlate”> <xsd:restriction base=”xsd:string” /> <xsd:pattern value=”[A-Z]{3}d{3}”/> </xsd:restriction> </xsd:simpleType>

Godtyckliga ”regular expressions” kan skapas genom att använda en facet som heter pattern som begränsning på en sträng.

Exempel

<xsd:simpleType name=”registrationPlate”>

<xsd:restriction base=”xsd:string” />

<xsd:pattern value=”[A-Z]{3}d{3}”/>

</xsd:restriction>

</xsd:simpleType>

Unioner (simpleType) Det går även att skapa datatyper som är unionen av två eller flera andra datatyper. Detta görs med xsd:union Exempel <xsd:simpleType name=”ingegerOrDate”> <xsd:union membertypes= ”xsd:int xsd:date”/> </xsd:simpleType>

Det går även att skapa datatyper som är unionen av två eller flera andra datatyper.

Detta görs med xsd:union

Exempel

<xsd:simpleType name=”ingegerOrDate”>

<xsd:union

membertypes= ”xsd:int

xsd:date”/>

</xsd:simpleType>

complexType xsd:complexType används för att deklarera element som ska ha barn-element och/eller attribut. Sekvenser anges med xsd:sequence

xsd:complexType används för att deklarera element som ska ha barn-element och/eller attribut.

Sekvenser anges med xsd:sequence

DTD <!ELEMENT person (firstname,lastname,phone)> <!ELEMENT firstname (#PCDATA)> <!ELEMENT lastname (#PCDATA)> <!ELEMENT phone (#PCDATA)> Motsvarande XML Schema <xsd:complexType name=”person”> <xsd:sequence> <xsd:element name=”firstname” type=”xsd:string”/> <xsd:element name=”lastname” type=”xsd:string”/> <xsd:element name=”phone” type=”phone”/> </xsd:sequence> </xsd:complexType> <xsd:simpleType name=”phone”> [. . . Deklaration av phone …] </xsd:simpleType> complexType (exempel) Här deklareras element för första gången En annan namespace

DTD

<!ELEMENT person (firstname,lastname,phone)>

<!ELEMENT firstname (#PCDATA)>

<!ELEMENT lastname (#PCDATA)>

<!ELEMENT phone (#PCDATA)>

Motsvarande XML Schema

<xsd:complexType name=”person”>

<xsd:sequence>

<xsd:element name=”firstname” type=”xsd:string”/>

<xsd:element name=”lastname” type=”xsd:string”/>

<xsd:element name=”phone” type=”phone”/>

</xsd:sequence>

</xsd:complexType>

<xsd:simpleType name=”phone”>

[. . . Deklaration av phone …]

</xsd:simpleType>

Choice Val av ett element ur en mängd görs med xsd:choice Exempel DTD <!ELEMENT fooOrBar (foo | bar)> <!ELEMENT foo (#PCDATA)> <!ELEMENT bar (#PCDATA)> Motsvarande XML Schema <xsd:complexType name=”fooOrBar”> <xsd:choice> <xsd:element name=”foo” type=”xsd:string”/> <xsd:element name=”bar” type=”xsd:string”/> </xsd:choice> </xsd:complexType>

Val av ett element ur en mängd görs med xsd:choice

Exempel

DTD

<!ELEMENT fooOrBar (foo | bar)>

<!ELEMENT foo (#PCDATA)>

<!ELEMENT bar (#PCDATA)>

Motsvarande XML Schema

<xsd:complexType name=”fooOrBar”>

<xsd:choice>

<xsd:element name=”foo” type=”xsd:string”/>

<xsd:element name=”bar” type=”xsd:string”/>

</xsd:choice>

</xsd:complexType>

Mixed content Blandat text och element-innehåll kan erhållas genom attributet mixed=”true” infogad på en complexType Observera att även om man endast endast vill ha ett element i en content model måste man definiera en sequence eller ett choice med ett element. Exempel DTD <!ELEMENT mixedElement (#PCDATA | name)*> <!ELEMENT name (#PCDATA)> Motsvarande XML Schema <xsd:complexType name=”mixedElement” mixed=”true”> <xsd:sequence> <xsd:element name=”name” type=”xsd:string”/> </xsd:sequence> </xsd:complexType>

Blandat text och element-innehåll kan erhållas genom attributet mixed=”true” infogad på en complexType

Observera att även om man endast endast vill ha ett element i en content model måste man definiera en sequence eller ett choice med ett element.

Exempel DTD

<!ELEMENT mixedElement (#PCDATA | name)*>

<!ELEMENT name (#PCDATA)>

Motsvarande XML Schema

<xsd:complexType name=”mixedElement” mixed=”true”>

<xsd:sequence>

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

</xsd:sequence>

</xsd:complexType>

Binda element till en typ Vi har (nästan) bara deklarerat typer än så länge, inte element. Flera element kan bindas till samma typ. Exempel <xsd:complexType name=”person”> <xsd:sequence> <xsd:element name=”firstname” type=”xsd:string”/> <xsd:element name=”lastname” type=”xsd:string”/> </xsd:sequence> </xsd:complexType> <xsd:element name=”teacher” type=”person”/> <xsd:element name=”student” type=”person”/>

Vi har (nästan) bara deklarerat typer än så länge, inte element.

Flera element kan bindas till samma typ.

Exempel

<xsd:complexType name=”person”>

<xsd:sequence>

<xsd:element name=”firstname” type=”xsd:string”/>

<xsd:element name=”lastname” type=”xsd:string”/>

</xsd:sequence>

</xsd:complexType>

<xsd:element name=”teacher” type=”person”/>

<xsd:element name=”student” type=”person”/>

Ett elements scope Till skillnad från en DTD kan man deklarera element som bara är giltiga i ett annat element . Det har vi gjort hittills. Det går även att deklarera globala element, som har giltighet i hela namespacen. Dessa måste vara deklarerade som barn till xsd:schema.

Till skillnad från en DTD kan man deklarera element som bara är giltiga i ett annat element .

Det har vi gjort hittills. Det går även att deklarera globala element, som har giltighet i hela namespacen. Dessa måste vara deklarerade som barn till xsd:schema.

Ett elements scope (2) Globala/lokala element fungerar som globala/lokala variabler vad gäller scope. För att använda ett globalt element använder man attributet ref i stället för attributet name.

Globala/lokala element fungerar som globala/lokala variabler vad gäller scope.

För att använda ett globalt element använder man attributet ref i stället för attributet name.

Ett elements scope (3) Exempel: instans av kommande schema <complaint> <comment>En kommentar</comment> <comment> <commentID>ID17</commentID> <comment> En till kommentar av annan typ </comment> </comment> </complaint>

Exempel: instans av kommande schema

<complaint>

<comment>En kommentar</comment>

<comment>

<commentID>ID17</commentID>

<comment>

En till kommentar av annan typ

</comment>

</comment>

</complaint>

Ett elements scope (3) Exempel: Schema för föregående instans <xsd:schema> <xsd:element name=”comment” type=”commentType”/> <xsd:complexType name=”commentType”> <xsd:element name=”commentID” type=”xsd:ID”/> <xsd:element name=”comment” type=”xsd:string”/> </xsd:complexType> <xsd:complexType name=”complaintType”> <xsd:sequence> <xsd:element name=”comment” type=”xsd:string”/> <xsd:element ref=”comment”/> </xsd:sequence> </xsd:complexType> <xsd:element name=”complaint” type=”complaintType”/> </xsd:schema>

Exempel: Schema för föregående instans

<xsd:schema>

<xsd:element name=”comment” type=”commentType”/>

<xsd:complexType name=”commentType”>

<xsd:element name=”commentID” type=”xsd:ID”/>

<xsd:element name=”comment” type=”xsd:string”/>

</xsd:complexType>

<xsd:complexType name=”complaintType”>

<xsd:sequence>

<xsd:element name=”comment” type=”xsd:string”/>

<xsd:element ref=”comment”/>

</xsd:sequence>

</xsd:complexType>

<xsd:element name=”complaint” type=”complaintType”/>

</xsd:schema>

Skillnad mellan DTD och XML Schema i instansdokument Vad blir det då för skillnad i instansdokumenten om man använder schemas istället för DTDer? Svar: Inga, utom möjligtvis referensen till var Schemat/DTDn befinner sig. Skillnaden är endast hur man uttrycker constraints och hur exakt man kan uttrycka constraints

Vad blir det då för skillnad i instansdokumenten om man använder schemas istället för DTDer?

Svar: Inga, utom möjligtvis referensen till var Schemat/DTDn befinner sig.

Skillnaden är endast hur man uttrycker constraints och hur exakt man kan uttrycka constraints

*, + och ? Hur uttrycker man repetitionsoperatorer som *, + och ? som finns i DTD-syntax? Svar: Med attributen minOccurs och maxOccurs <!ELEMENT foo (bar?) > <xsd:complexType name=”foo”> <xsd:element ref=”bar” minOccurs=”0” maxOccurs=”1”/> </xsd:complexType> <!ELEMENT foo (bar*) > <xsd:complexType name=”foo”> <xsd:element ref=”bar” minOccurs=”0” maxOccurs=”unbounded”/> </xsd:complexType> <!ELEMENT foo (bar+) > <xsd:complexType name=”foo”> <xsd:element ref=”bar” minOccurs=”1” maxOccurs=”unbounded”/> </xsd:complexType>

Hur uttrycker man repetitionsoperatorer som *, + och ? som finns i DTD-syntax?

Svar: Med attributen minOccurs och maxOccurs

<!ELEMENT foo (bar?) >

<xsd:complexType name=”foo”>

<xsd:element ref=”bar” minOccurs=”0” maxOccurs=”1”/>

</xsd:complexType>

<!ELEMENT foo (bar*) >

<xsd:complexType name=”foo”>

<xsd:element ref=”bar” minOccurs=”0” maxOccurs=”unbounded”/>

</xsd:complexType>

<!ELEMENT foo (bar+) >

<xsd:complexType name=”foo”>

<xsd:element ref=”bar” minOccurs=”1” maxOccurs=”unbounded”/>

</xsd:complexType>

<xsd:complexType name=”foo”> <xsd:element ref=”bar” /> </xsd:complexType> <xsd:complexType name=”fooBar”> <xsd:complexContent> <xsd:extension base=”foo”/> <xsd:sequence> <xsd:element ref=”abc” /> <xsd:sequence> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:element name=”fooBarElement” type=”fooBar”/> Arv - Extension Det är möjligt att ta en existerande complexType och definiera en ny complexType som innehåller fler element. Jfr OO subklasser Instans <fooBarElement> <bar></bar> <abc></abc> <fooBarElement> Utvidgningarna läggs alltid till sist, efter elementen i ursprungselementet.

<xsd:complexType name=”foo”>

<xsd:element ref=”bar” />

</xsd:complexType>

<xsd:complexType name=”fooBar”>

<xsd:complexContent>

<xsd:extension base=”foo”/>

<xsd:sequence>

<xsd:element ref=”abc” />

<xsd:sequence>

</xsd:extension>

</xsd:complexContent>

</xsd:complexType>

<xsd:element name=”fooBarElement” type=”fooBar”/>

Det är möjligt att ta en existerande complexType och definiera en ny complexType som innehåller fler element.

Jfr OO subklasser

Abstrakta typer Det går även att göra en datatyper som inget element direkt kan använda som datatyp. Det går däremot att ”extenda” datatypen och använda de nya datatyperna till element. <xsd:complexType name=”person” abstract=”true”> <xsd:sequence> <xsd:element name=”firstname” type=”xsd:string”/> <xsd:element name=”lastname” type=”xsd:string”/> </xsd:sequence> </xsd:complexType> <xsd:complexType name=”teacher”/> <complexContent> <xsd:extension base=”person”> <xsd:sequence> <xsd:element name=”empNo” type=”xsd:string”/> </xsd:sequence> </xsd:extension> </complexContent> </xsd:complexType> <element name=”a” type=”person”/> fungerar ej <element name=”a” type=”teacher”/> fungerar

Det går även att göra en datatyper som inget element direkt kan använda som datatyp.

Det går däremot att ”extenda” datatypen och använda de nya datatyperna till element.

<xsd:complexType name=”person” abstract=”true”>

<xsd:sequence>

<xsd:element name=”firstname” type=”xsd:string”/>

<xsd:element name=”lastname” type=”xsd:string”/>

</xsd:sequence>

</xsd:complexType>

<xsd:complexType name=”teacher”/>

<complexContent>

<xsd:extension base=”person”>

<xsd:sequence>

<xsd:element name=”empNo” type=”xsd:string”/>

</xsd:sequence>

</xsd:extension>

</complexContent>

</xsd:complexType>

<element name=”a” type=”person”/> fungerar ej

<element name=”a” type=”teacher”/> fungerar

Substitutiongroups Ibland vill man specificera att ett element e1 ska anses vara ”ekvivalent” med ett annat element e2. e2 måste ha ”ärvt” från samma datatyp som e1. Om detta är uppfyllt går det att ersätta e1 med e2 på positioner där e1 ska förekomma, förutsatt att man deklarerar det med en substitutionGroup

Ibland vill man specificera att ett element e1 ska anses vara ”ekvivalent” med ett annat element e2.

e2 måste ha ”ärvt” från samma datatyp som e1.

Om detta är uppfyllt går det att ersätta e1 med e2 på positioner där e1 ska förekomma, förutsatt att man deklarerar det med en substitutionGroup

<element name=&quot;PrintingPress&quot; type=&quot;imf:AbstractResourceType&quot; substitutionGroup=&quot;imf:abstract_resource&quot;/> <complexType name=&quot;PathClassType&quot;> <sequence> <element ref=&quot;imf:abstract_resource&quot; /> </sequence> </complexType> <element name=”Path” type=”imf:PathClassType”/> Substitutiongroups (2) Här kan man stoppa in PrintingPress istället.

<element

name=&quot;PrintingPress&quot;

type=&quot;imf:AbstractResourceType&quot;

substitutionGroup=&quot;imf:abstract_resource&quot;/>

<complexType name=&quot;PathClassType&quot;>

<sequence>

<element ref=&quot;imf:abstract_resource&quot; />

</sequence>

</complexType>

<element name=”Path” type=”imf:PathClassType”/>

Specificera ett schemas namespace Det går att i ett schema specificera schemats namespace Detta görs med targetNamespace. Det går även att ha schemas som defaultnamespace <schema targetNamespace=” http://www.demo.com/test” xmlns:test=” http://www.demo.com/test” xmlns=” http:///www.w3.org/2001/XMLSchema” > <complexType name=”person”> <sequence> <element name=”firstname” type=”string”/> <element name=”lastname” type=”string”/> </sequence> </complexType> <element name=”student” type=”test:person”/>

Det går att i ett schema specificera schemats namespace

Detta görs med targetNamespace.

Det går även att ha schemas som defaultnamespace

<schema targetNamespace=” http://www.demo.com/test” xmlns:test=” http://www.demo.com/test” xmlns=” http:///www.w3.org/2001/XMLSchema” >

<complexType name=”person”>

<sequence>

<element name=”firstname” type=”string”/>

<element name=”lastname” type=”string”/>

</sequence>

</complexType>

<element name=”student” type=”test:person”/>

Sammanfattning och fortsättning Schemas används till samma saker som en DTD, men ger betydligt bättre kontroll att specificera olika datatyper, uttrycka mer komplexa relationer och dataabstraktioner. Nu kan du börja på XML Schema-laborationen, som dock är betydligt svårare än DTD-laborationen.

Schemas används till samma saker som en DTD, men ger betydligt bättre kontroll att specificera olika datatyper, uttrycka mer komplexa relationer och dataabstraktioner.

Nu kan du börja på XML Schema-laborationen, som dock är betydligt svårare än DTD-laborationen.

Add a comment

Related presentations

Related pages

XML Schema – Wikipedia

XML Schema, abgekürzt XSD (XML Schema Definition), ist eine Empfehlung des W3C zum Definieren von Strukturen für XML-Dokumente. Anders als bei den ...
Read more

XML schema - Wikipedia, the free encyclopedia

An XML schema is a description of a type of XML document, typically expressed in terms of constraints on the structure and content of documents of that ...
Read more

XML Schema Tutorial - W3Schools Online Web Tutorials

An XML Schema describes the structure of an XML document. In this tutorial you will learn how to create XML Schemas and how to use XML Schemas in your ...
Read more

XML Schema - World Wide Web Consortium (W3C)

Contains status information, links to specifications and tools that implement XML Schema
Read more

XSD (XML Schema Definition) - Torsten Horn, Ingenieurbüro ...

Inhalt. Begriffe und Übersicht; Vorwort zu den folgenden Beispielen "Russian Doll Design" ("Matrjoschka", geschachteltes Baumstruktur-Schema) "Salami ...
Read more

XML-Schemas

Ein XML-Schema beschreibt eine Geschäftsaktivität, die in XML dargestellt ist. Da Microsoft BizTalk Server 2013 XML als kanonische Darstellung für ...
Read more

Understanding XML Schemas

Schemas are intended to be an improvement on DTDs, which are used to validate XML documents. In this article, we review schemas and the new features ...
Read more

XML Schema - W3Schools Online Web Tutorials

Well organized and easy to understand Web bulding tutorials with lots of examples of how to use HTML, CSS, JavaScript, SQL, PHP, and XML.
Read more

XML.com

Extensibility, XML Vocabularies, and XML Schema By David Orchard David Orchard returns to the issue of extending and v ersioning XML vocabularies, ...
Read more

Einführung in XML-Schemas (XML-Designer)

XML-Schemas sind Dokumente, die zum Definieren und Überprüfen des Inhalts und der Struktur von XML-Daten verwendet werden, analog zum Definieren und ...
Read more