Vad är XML Schemas. XML Schemas. Varför XML Schmas. Namespace

Relevanta dokument
Vad är XML XML. Exempel - SMIL. Exempel - XHTML. extensible Markup Language

XML. Dagens föreläsning. Vad är XML extencible Markup Language. Exempel - XHTML

Dagens föreläsning. Vad är XML. Exempel - XHTML. extencible Markup Language

En snabb titt på XML LEKTION 6

XML Schema koloss på lerfötter? [Stig Berild]

FältGIS. Utfört av Patrik Fundberg. Mälardalens Högskola, IDt. Handledare John Kessler, LandFocus IS AB Christer Norström, Mälardalens Högskola

<sid nr="1" av="2" /> Stackenföreläsning: XML & XSLT: Intro. XML och XSLT

Postbeskrivning FileResponse innehåll

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Utveckling av webbapplikation för informationshantering i projekt

Programmering A. Johan Eliasson

JavaScript. Innehåll. Historia. Document object model DHTML. Varför Javascript?

Designmönster/Design patterns. Design patterns. Klassifikation av design patterns. Design patterns. Varför använda Design patterns?

XML Schema en översikt 1

Schema XMLSIE_1_0.xsd

RIV TA Domänschema 2.1

Repetition av OOP- och Javabegrepp

Namn: (Ifylles av student) Personnummer: Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

Repetition av OOP- och Javabegrepp

Dokumentschema förpackning av externa objekt. Version: 1.0 Status: Standard Datum:

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

TDIU01 - Programmering i C++, grundkurs

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

OOP Objekt-orienterad programmering

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

Vad är XSLT XSLT extensible Stylesheet Language Transformations

E02 "The Review" Föreläsning 2, HT2013 Grunderna, repetition. Johan Leitet. Kurs: 1dv403 Webbteknik I

Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo

Vad är XLink. XLink/XPointer/XSLT-FO. Namespace. Simple Links

Classes och Interfaces, Objects och References, Initialization

Omgivningar. Omgivningar är viktiga eftersom de avgör vilka namn som är synliga och därmed dessas innebörd och de värden som är förknippade med dem.

729G74 IT och programmering, grundkurs. Tema 2, Föreläsning 1 Jody Foo,

Anteckningar 1: Grundläggande saker

RIV TA Domänschema 2.1

Programkonstruktion. Tentamen,

729G04 Programmering och diskret matematik. Föreläsning 7

TDIU01 - Programmering i C++, grundkurs

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder

Objektorienterad Programmering (TDDC77)

Tillämpningsanvisningar

Grunderna för relationsmodellen!

Grundläggande datalogi - Övning 1

Repetition av viktiga begrepp inom objektorienterad programmering

Introduk+on +ll programmering i JavaScript

Innehåll. Introduktion till objektorientering. OOP (objektorienterad programmering) Objekt, instanser, klasser

1 Repetition av viktiga begrepp inom objektorienterad programmering

Innehåll Introduktion... 3 InteractiveScene.config... 3 Scener <scenes>... 3 Typsnitt <fonts>... 3 Övergångar <transitions>...

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Allmänna anvisningar: Skriv dina svar på svarsblanketten (se nästa sida) Markera och ange alla svar tydligt och entydigt efter instruktionerna.

Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

Informationsmodellering och e-infrastrukturer

Informationsteknik Document Schema Definition Languages (DSDL) Part 8: Document Semantics Renaming Language (DSRL) (ISO/IEC :2009, IDT)

TDIU01 (725G67) - Programmering i C++, grundkurs

Datastrukturer. Erik Forslin. Rum 1445, plan 4 på Nada

Objektorienterad programmering Föreläsning 8. Copyright Mahmud Al Hakim Agenda (halvdag)

TDIU01 - Programmering i C++, grundkurs

729G74 IT och programmering, grundkurs. Tema 2. Föreläsning 3 Jody Foo,

Föreläsningsmaterial (Arv) Skrivet av Andreas Lund

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

729G74 IT och programmering, grundkurs. Tema 2. Föreläsning 3 Jody Foo,

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

1 Funktioner och procedurell abstraktion

DP7 Kompletterande information

Föreläsning 9: Arv och UML

Imperativ programmering. Föreläsning 4

XML-dokumentation. För Projektledare & utvecklare hos IT-leverantörer till Svenska Intensivvårdsregistret

XML. Extensible Markup Language

Major Release 3.1. Vad innebär Major Release 3.1 för svenska användare?

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Objektorienterad programmering. Grundläggande begrepp

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU

729G04 Programmering och diskret matematik

RIV Tekniska Anvisningar 2.1

TENTAMEN OOP

Språket Python - Del 1 Grundkurs i programmering med Python

Schematransformation SLU

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

DAT043 - Föreläsning 7

Innehåll. dynamisk bindning. och programmering CRC) u Arv, polymorfi och

Föreläsning REPETITION & EXTENTA

Datalogi I, grundkurs med Java 10p, 2D4112, Fiktiv tentamen, svar och lösningar och extra kommentarer till vissa uppgifter 1a) Dividera förs

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Postbeskrivning Customerjournal_1.0 innehåll

Generering av XSLT-dokument

Objektorienterad Programmering (TDDC77)

Outline. Objektorienterad Programmering (TDDC77) Att instansiera en klass. Objekt. Instansiering. Åtkomst. Abstrakt datatyp.

Agenda. Objektorienterad programmering Föreläsning 13

729G74 IT och programmering, grundkurs. Tema 3. Föreläsning 2 Jody Foo,

Hantera informationspaket i system för bevarande

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

Anvisningar för ifyllning av Excelark för databaser (xml-filer)

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning.

Objektorienterad Programmering (TDDC77)

Allmänna anvisningar: Skriv dina svar på svarsblanketten (se nästa sida) Markera och ange alla svar tydligt och entydigt efter instruktionerna.

TDDC74 Programmering, abstraktion och modellering. Tentamen

Transkript:

Vad är XML Schemas XML Schemas XML Schemas gör samma sak som DTDer fast bättre dvs med XML Schemas går det att definiera XMLvokabulärer och det går att validera instansdokument mot dessa schemas. XML Schemas är en W3C-rekommendation sedan 2001-05-02. 2D1525 Programmering för interaktiva medier http://www.nada.kth.se/kurser/kth/2d1525/ 2001-09-06 Björn Hedin, NADA/KTH 2001 1 2001-09-06 Björn Hedin, NADA/KTH 2001 2 Varför XML Schmas Namespace 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. XML Schemas har namespacen http://www.w3.org/2001/xmlschema Prefixet brukar vara xsd (XML Schema Definition) 2001-09-06 Björn Hedin, NADA/KTH 2001 3 2001-09-06 Björn Hedin, NADA/KTH 2001 4

Simlpe Types vs Complex Types 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. är string, date, int, duration. Attribut innehåller Simple Content. Complex Content är innehåll som innehåller andra element. 2001-09-06 Björn Hedin, NADA/KTH 2001 5 Simpe Types vs Complex Types 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:compextype 2001-09-06 Björn Hedin, NADA/KTH 2001 6 Några fördefinierade datatyper (simpletypes) Typdeklarationer simpletype 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 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. <xsd:simpletype name= positivefloat > <xsd:restriction base= xsd:float > <xsd:minexclusive value= 0 /> </xsd:restriction> Facets <xsd:simpletype name= myboolean > <xsd:restriction base= xsd:string > <xsd:enumeration value= true /> <xsd:enumeration value= false /> </xsd:restriction> 2001-09-06 Björn Hedin, NADA/KTH 2001 7 2001-09-06 Björn Hedin, NADA/KTH 2001 8

Listor (simpletype) Regular Expressions (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 <xsd:simpletype name= integerlist > <xsd:list itemtype name= xsd:int /> Godtyckliga regular expressions kan skapas genom att använda en facet som heter pattern som begränsning på en sträng. <xsd:simpletype name= registrationplate > <xsd:restriction base= xsd:string /> <xsd:pattern value= [A-Z]{3}\d{3} /> </xsd:restriction> 2001-09-06 Björn Hedin, NADA/KTH 2001 9 2001-09-06 Björn Hedin, NADA/KTH 2001 10 Unioner (simpletype) complextype Det går även att skapa datatyper som är unionen av två eller flera andra datatyper. Detta görs med xsd:union <xsd:simpletype name= ingegerordate > <xsd:union membertypes= xsd:int xsd:date /> xsd:compextype 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:element name= firstname type= xsd:string /> <xsd:element name= lastname type= xsd:string /> <xsd:element name= phone type= phone /> <xsd:simpletype name= phone > [... Deklaration av phone ] 2001-09-06 Björn Hedin, NADA/KTH 2001 11 2001-09-06 Björn Hedin, NADA/KTH 2001 12

Choice Mixed content Val av ett element ur en mängd görs med xsd:choice 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> Blandat text och element-innehåll kan erhållas genom attributet mixed= true infogad på en complextype DTD <!ELEMENT mixedelement (#PCDATA name)*> <!ELEMENT name (#PCDATA)> Motsvarande XML Schema <xsd:complextype name= mixedelement mixed= true > <xsd:element name= name type= xsd:string /> 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. 2001-09-06 Björn Hedin, NADA/KTH 2001 13 2001-09-06 Björn Hedin, NADA/KTH 2001 14 Binda element till en typ Ett elements scope Vi har bara deklarerat typer än så länge, inte element. Flera element kan bindas till samma typ. <xsd:complextype name= person > <xsd:element name= firstname type= xsd:string /> <xsd:element name= lastname type= xsd:string /> <xsd:element name= teacher type= person /> <xsd:element name= student type= person /> 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. 2001-09-06 Björn Hedin, NADA/KTH 2001 15 2001-09-06 Björn Hedin, NADA/KTH 2001 16

Ett elements scope (2) Ett elements scope (3) Globala/lokala element fungerar som lokala/globala 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. : Schema <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 name= complainttype > <xsd:element name= comment type= xsd:string /> <xsd:element ref= comment /> <xsd:element name= complaint type= complainttype /> </xsd:schema> : instans <complaint> <comment>en kommentar</comment> <comment> <commentid>id17</commentid> <comment> En till kommentar av annan typ </comment> </comment> </complaint> 2001-09-06 Björn Hedin, NADA/KTH 2001 17 2001-09-06 Björn Hedin, NADA/KTH 2001 18 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 Hur uttrycker man repetitionsoperatorer som *, + och? som finns i DTD-syntax? Svar: Med attributen minoccurs och maxoccurs *, + och? <!ELEMENT foo (bar?) > <xsd:element ref= bar minoccurs= 0 maxoccurs= 1 /> <!ELEMENT foo (bar*) > <xsd:element ref= bar minoccurs= 0 maxoccurs= unbounded /> <!ELEMENT foo (bar+) > <xsd:element ref= bar minoccurs= 1 maxoccurs= unbounded /> 2001-09-06 Björn Hedin, NADA/KTH 2001 19 2001-09-06 Björn Hedin, NADA/KTH 2001 20

Arv - Extension Abstrakta typer Det är möjligt att ta en existerande complextype och definiera en ny complextype som innehåller fler element. Jfr OO subklasser <xsd:element ref= bar /> Instans <foobarelement> <bar></bar> <abc></abc> <foobarelement> <xsd:complextype name= foobar > <xsd:complexcontent> <xsd:extension base= foo /> <xsd:element ref= abc /> </xsd:extension> </xsd:complexcontent> <xsd:element name= foobarelement type= foobar /> 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:element name= firstname type= xsd:string /> <xsd:element name= lastname type= xsd:string /> <xsd:complextype name= teacher /> <complexcontent> <xsd:extension base= person > <xsd:element name= empno type= xsd:string /> </xsd:extension> </complexcontent> <element name= a type= person /> fungerar ej <element name= a type= teacher /> fungerar 2001-09-06 Björn Hedin, NADA/KTH 2001 21 2001-09-06 Björn Hedin, NADA/KTH 2001 22 Substitutiongroups Substitutiongruoups (2) 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="printingpress" type="imf:abstractresourcetype" substitutiongroup="imf:abstract_resource"/> <complextype name="pathclasstype"> <sequence> <element ref="imf:abstract_resource" /> </sequence> </complextype> <element name= Path type= imf:pathclasstype /> Här kan man stoppa in PrintingPress istället. 2001-09-06 Björn Hedin, NADA/KTH 2001 23 2001-09-06 Björn Hedin, NADA/KTH 2001 24

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= text:person /> 2001-09-06 Björn Hedin, NADA/KTH 2001 25