×
Menu
Index

Het gebruik van schema's

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:
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