Introductie
In dit hoofdstuk wordt een klein stukje theorie over schema’s (XSD bestanden) behandeld. Voor meer informatie verwijzen wij graag naar http://www.w3schools.com/schema.
Schema’s
Een schema beschrijft de structuur van een XML bestand.
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="CL">
<xs:complexType>
<xs:sequence>
<xs:element name="CL_VRWRKCD" type="xs:anyType"/>
<xs:element name="CL_VOLGNUM" type="xs:anyType"/>
<xs:element name="CLAUSNR" type="xs:anyType"/>
<xs:element name="CLAUSOM" type="xs:anyType"/>
<xs:element name="CLT001" type="xs:anyType"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
In bovenstaand voorbeeld ziet u een Schema waarin een deel van de AFD entiteit CL (clausule) is beschreven.
Een XML schema definieert:
-
elementen die voor kunnen komen in een document
-
attributen die voor kunnen komen in een document
-
welke elementen “child” elementen zijn
-
de volgorde van “child” elementen
-
het aantal “child”elementen
-
of een element leeg is of tekst kan bevatten
-
het data type voor elementen en attributen
-
standaard en vaste waarden voor elementen en attributen
XML Schema’s zijn zelf ook beschreven in de XML syntax.
<schema> Element
Het <schema> element is het root element van ieder XML Schema.
<?xml version="1.0"?>
<xs:schema>
...
...
</xs:schema>
Er kunnen attributen in het <schema> element voorkomen. Vaak ziet het <schema> element er als volgt uit:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.comparity.nl" xmlns="http://www.comparity.nl" elementFormDefault="qualified">
...
...
</xs:schema>
Het fragment: xmlns:xs="http://www.w3.org/2001/XMLSchema" geeft aan dat de elementen en data types in het schema van de “http://www.w3.org/2001/XMLSchema” namespace komen. Dit impliceert bovendien dat elementen die van deze namespace komen voorafgegaan moeten worden met xs:
Dit fragment: targetNamespace="http://www.comparity.nl" impliceert dat de elementen die in dit schema worden gedefinieerd (zoals CL, CL_VOLGNUM, etc.) van de “http://www.comparity.nl” namespace komen.
Het fragment: xmlns="http://www.comparity.nl" geeft aan dat de standaard namespace “http://www.comparity.nl” is.
Het fragment: elementFormDefault="qualified" geeft aan dat alle elementen in een XML instantie die in dit schema gedeclareerd zijn aan deze namespaces moeten voldoen.
Simple Element
Een simple element is een XML element dat alleen tekst kan bevatten. Een Simple Element kan geen andere elementen of attributen bevatten. Ondanks dat hier over “alleen tekst” wordt gesproken kan deze tekst van verschillende types zijn. Het element kan van een van de types in de XML Schema definitie zijn (boolean, string, date, etc.), maar u kunt ook uw eigen types definiëren.
Om een simple element te definiëren gebruikt u de volgende syntax:
<xs:element name="xxx" type="yyy"/>
waar xxx is de naam van het element en yyy het type.
De meest gebruikte types zijn:
Bijvoorbeeld:
<xs:element name="CL_VOLGNUM" type="xs:integer"/>
Attributes
Simple elements kunnen geen attributes bezitten. Als een element attributes heeft, wordt het als een complex type beschouwd. Echter het attribute zelf wordt als een simple type gedeclareerd.
Om een attribute te definiëren gebruikt u de volgende syntax:
<xs:attribute name="xxx" type="yyy"/>
waar xxx is de naam van het attribute en yyy het type.
Met bijvoorbeeld:
<xs:attribute name="NR" type="xs:integer"/>
kunt u het attribute NR definiëren bijvoorbeeld in een element met de naam L voor onderstaande XML.
<L NR=1234>waarde</L>
Complex Element
Een complex element is een XML element dat andere elementen of attributen bevat. Een complex element wordt als volgt gedeclareerd:
<xs:element name="CL">
<xs:complexType>
<xs:sequence>
<xs:element name="CL_VOLGNUM" type="xs:integer"/>
<xs:element name="CL_VRWRKCD" type="xs:integer"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Indicators
Er zijn 7 indicators:
Voor de volgorde (order indicators):
Voor het verschijnen (occurance indicators):
Om te groeperen (Group indicators):
Order indicators
Order indicators worden gebruikt om de volgorde van de elementen te definiëren.
All indicator
Met de all indicator specificeert u dat “child” elementen in elke willekeurige volgorde mogen verschijnen en dat ieder element één keer moet voor komen.
<xs:element name="person">
<xs:complexType>
<xs:all>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:all>
</xs:complexType>
</xs:element>
Choice indicator
Met de choice indicator specificeert u dat of het ene of het andere “child” element voor komt.
<xs:element name="person">
<xs:complexType>
<xs:choice>
<xs:element name="employee" type="employee"/>
<xs:element name="member" type="member"/>
</xs:choice>
</xs:complexType>
</xs:element>
Sequence indicator
Met de sequence indicator specificeert u dat de “child” elementen in een specifieke volgorde moeten voor komen.
<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>
Occurance indicators
Met de occurance indicators kunt u bepalen hoe vaak een element voor komt.
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="fullname" type="xs:string"/>
<xs:element name="childname" type="xs:string" maxOccurs="10"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Group indicators
Kijk voor meer informatie over group indicators op:
Include
Met include kunt u een ander XSD bestand op die plaats inlezen.
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:include schemaLocation="ENTITEITEN.xsd"/>
<xs:element name="Relatiedocument">
<xs:complexType>
<xs:sequence>
<xs:element ref="SoftRules" />
<xs:element ref="Relatiemantel" />
<xs:element ref="Contract" />
<xs:element ref="Pakket" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Het ingelezen bestand (EINTITEITEN.xsd) kan er zo uit zien:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:include schemaLocation="Contract.xsd"/>
<xs:include schemaLocation="SoftRules.xsd"/>
<xs:include schemaLocation="Relatiemantel.xsd"/>
<xs:include schemaLocation="Pakket.xsd"/>
<xs:include schemaLocation="AA.xsd"/>
<xs:include schemaLocation="AB.xsd"/>
<xs:include schemaLocation="AC.xsd"/>
...
<xs:include schemaLocation="ZW.xsd"/>
</xs:schema>
AA.xsd kan er als volgt uit zien:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="AA">
<xs:sequence>
<xs:element name="AA_ENTITEI">
<xs:annotation>
<xs:appinfo>
<Description>Entiteitscode</Description>
<TextValuesID>ADNENT</TextValuesID>
</xs:appinfo>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="2" />
</xs:restriction>
</xs:simpleType>
</xs:element>
...
<xs:element name="AA_FINLEAS">
<xs:annotation>
<xs:appinfo>
<Description>Lease aand., code</Description>
<TextValuesID>ADNLEA</TextValuesID>
</xs:appinfo>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:length value="1" />
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:schema>
ComplexContent
Met ComplexContent kunnen elders gedefinieerde Complex Elements worden hergebruikt en uitgebreid. Zie onderstaand voorbeeld.
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Contract">
<xs:complexType>
<xs:sequence>
<xs:element name="AL">
<xs:complexType>
<xs:complexContent mixed="false">
<xs:extension base="AL">
<xs:sequence>
<xs:element name="BY">
<xs:complexType>
<xs:complexContent mixed="false">
<xs:extension base="BY">
<xs:sequence />
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="MY">
<xs:complexType>
<xs:complexContent mixed="false">
<xs:extension base="MY">
<xs:sequence />
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Let op!
|
Het gebruik van namespaces in het door SoftRules® te processen XML wordt niet volledig ondersteund. Neem contact met ons op over de beperkingen die hiervoor gelden. Stuur hiervoor een mail naar support@softrules.com
|