XML Schema cheat sheet

Page 1

Cheat sheet til XML Schema En understregning betyder, at elementet findes beskrevet et andet sted i dette dokument. Afsluttes startelementet med tre prikker (...) betyder det, at den viste attributliste ikke er komplet (der kan med andre ord skrives flere attributter end de her viste) Elementer og attributter, der erklæres direkte under schema-elementet kaldes globale. Erklæres de som en del af complexType kaldes de for lokale. ComplexTypes og simpleTypes, der erklæres direkte under schema-elementet kaldes globale, og skal navngives (hvorfor de også kaldes named). ComplexTypes og simpleTypes, der ikke erklæres direkte under schema-elementet kaldes lokale, og kan ikke navngives (hvorfor de også kaldes anonymous). Som attributter under schema-elementet kan man angive elementFormDefault og attributFormDefault. Med qualified angiver man, at elementer/attributter ikke ”arver” namespace fra deres nærmeste forfader med angivet namespace (de skal altså selv prefix’es), mens unqualified betyder at de arver namespace. - Når man henviser til typer erklæret i ens eget schema, skal det gøres med namespace – erklær fx xmlns:tns=”target namespace’et” og dernæst fx type=”tns:MyType”

-

<!-- Bemærk at schema-elementet altid skal være root-elementet i en schema-definition. - -> <schema targetNamespace=”anyURI” elementFormDefault =”qualified eller unqualified” attributeFormDefault=”qualified eller unqualified” ... > 0 eller flere af følgende (gerne sammenblandet): <include>, <import>, <redefine> eller <annotation> 0 eller flere af følgende (gerne sammenblandet): <simpleType>, <complexType>, <group>, <attributeGroup>, <element>, <attribute> eller <notation> (alle kan evt. følges af <annotation>) </schema> <!-- Første variant af attribute. Får sin type ved at referere til navnet på en navngiven / global simpleType – evt. en built-in simpleType fra XML Schema-specifikationen. --> <attribute type=”QName” name=”NCName” default=”string” use=”required eller optional eller prohibited”...> Evt.: <annotation> </attribute> <!-- Anden variant af attribute. Får sin type ved selv at erklære en lokal / unavngiven simpleType. --> <attribute name=”NCName” default=”string” use=”required eller optional eller prohibited” ...> Evt.: <annotation> Netop én af følgende: <simpleType> </attribute> <!-- Første variant af element. Får sin type ved at referere til navnet på en navngiven / global type – evt. en built-in simpleType fra XML Schema-specifikationen. --> <element type=”QName” name=”NCName” nillable=”boolean” default=”string” minOccurs=”nonNegativeInteger” maxOccurs=”nonNegativeInteger eller unbounded” ...> Evt.: <annotation> 0 eller flere af følgende (gerne sammenblandet): <unique>, <key> eller <keyref> </element > <!-- Anden variant af attribute. Får sin type ved selv at erklære en lokal / unavngiven type. --> <element name=”NCName” nillable=”boolean” default=”string” minOccurs=”nonNegativeInteger” maxOccurs=”nonNegativeInteger eller unbounded”...> Evt.: <annotation> Netop én af følgende: <simpleType> eller <complexType> 0 eller flere af følgende (gerne sammenblandet): <unique>, <key> eller <keyref> </element >


<!-- Bemærk at name-attributten kun er tilladt for global simpleTypes, dvs. de simpleTypes, der er children af schema-elementet (kaldes derfor også named simple types) --> <simpleType name=”NCName“ ...> Evt.: <annotation> Præcis én af følgende: <restriction>, <list> eller <union> </simpleType> <!-- Man kan angive den type, som typen baseres på, enten ved at lade attributten base referere til en global simpleType, eller ved at erklære en local unnamed simpleType. --> <restriction base=”QName” ...> Evt.: <annotation> Evt.: <simpleType> 0 eller flere af følgende facets (gerne sammenblandet): <minExclusive>, <minInclusive>, <maxExclusive>, <maxInclusive>, <totalDigits>, <fractionDigits>, <length>, <minLength>, <maxLength>, <enumeration>, <whiteSpace> eller <pattern> </restriction> <!-- Man kan angive typen af elementer i listen, enten ved at lade attributten itemType referere til en global simpleType, eller ved at erklære en local unnamed simpleType. --> <list itemType=”QName” ...> Evt.: <annotation> Evt.: <simpleType> </list> <!-- Man kan angive typerne, der skal indgå i fællesmængden, enten ved at lade attributten itemTypes referere til en række globale simpleTypes, eller ved at erklære en række local unnamed simpleTypes. --> <union itemTypes=”Liste af QNames adskilt af spaces” > Evt.: <annotation> 0 eller flere: <simpleType> </union> <!-- Bemærk at name-attributten kun er tilladt for global complexTypes, dvs. de complexTypes, der er children af schema-elementet (kaldes derfor også named complex types) --> <complexType name=”“ ...> <!-- Første variant af complexType --> Evt.: <annotation> Præcis én af følgende: <simpleContent> eller <complexContent> </complexType> <complexType name=”“ ...> <!-- Anden variant af complexType --> NB: default-værdien for minOccurs og for maxOccurs er 1 Evt.: <annotation> Evt. én af følgende: <group>, <all>, <choice> eller <sequence> 0 eller flere af følgende (gerne sammenblandet): <attribute> eller <attributeGroup> Evt. én af følgende: <anyAttribute> </complexType> <all minOccurs=”nonNegativeInteger” maxOccurs=”nonNegativeInteger eller unbounded” ...> <!-- Alle elementerne skal være der, men de kan stå i en vilkårlig rækkefølge --> Evt.: <annotation> 0 eller flere af følgende: <element> </all> <choice minOccurs=”nonNegativeInteger” maxOccurs=”nonNegativeInteger eller unbounded” ...> <!-- Kun ét af de angivne elementer kan stå der --> Evt.: <annotation> 0 eller flere af følgende (gerne sammenblandet): <element>, <group>, <choice>, <sequence> eller <any> </choice> <sequence minOccurs=”nonNegativeInteger” maxOccurs=”nonNegativeInteger eller unbounded” ...> <!-- Alle elementerne skal stå der i den angivne rækkefølge --> Evt.: <annotation> 0 eller flere af følgende (gerne sammenblandet): <element>, <group>, <choice>, <sequence> eller <any> </sequence >


Hvad sker der, hvis man ikke eksplicit giver en attribut en type? (dvs. hvis man hverken refererer en global simpleType vha. type-attributten og ej heller erklærer en ny lokal simpleType) Hvad sker der, hvis man ikke eksplicit giver et element en type? (dvs. hvis man hverken refererer en global type vha. type-attributten og ej heller erklærer en ny lokal type) Hvad fanden betyder use=”prohibited” i <attribute>-elementet? Er det noget, der kun er relevant ifm. arv? Hvad betyder det at en attribut er global? (dvs. at den er erklæret direkte under schema-elementet) Diverse noter (ting som ikke er med hverken på dette cheat-sheet eller i slide’ene - XML Schema definerer en række attributter, som kan bruges i schema-instanser (erklæres typisk med xmlns:xsi=”...”) o Har fx xsi:schemaLocation=”Par af namespace og URL adskilt af white spaces” o Har fx xsi:type, der bruges for at angive, at et element i et XML-dokument har en subtype af den type, som schema’et egentligt foreskriver (kan ikke udledes af compileren uden hjælp) - Man kan subtype på to måder i XML Schema: o extension (hvor man arver attributter og elementer og bygger videre på dem) o restriction (hvor man indsnævrer basetypens værdirum – fx ved at indskrænke occurances til en delmængde af de for basetypen lovlige) - Typesystemet i XML Schema o Schema understøtter polymorfi (dvs. man kan indsætte en subtype hvor en supertype forventes – man skal i så tilfælde explicit angive typen med xsi:type=”...”) o Man kan lave abstract complexTypes (kan ikke instantieres – brug konkret subtype i stedet) o Man kan lave final complexTypes (man kan forhindre extension, restriction eller evt. begge dele) o Typesystemet er forklaret rimeligt godt i Monson-Haefels J2EE Web Services sektion 3.2 - Kombination af schemas o import-elementet gør det muligt at definere et schema vha. typer, som allerede er defineret i et eksisterende schema o include-elementet gør det muligt at inkludere indholdet fra en anden fil i denne, idet de dog skal have samme namespace (gør det muligt at opsplitte definitionen af et namespace på flere filer)


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.