Visual Basic 2012 Voorbeelden
   

visual basic 2012 broncode voorbeelden

Blijf op de hoogte van de recente aanpassingen op vbvoorbeelden!

Microsoft Visual Studio 2012Microsoft Developers Network - Visual BasicMicrosoft .NET Framework

30.2. XSD Type Definities

Print Email Deel op Twitter Deel op Facebook

Dit artikel is gepubliceerd op maandag 15 oktober 2012 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.

Tot nu toe werd gewerkt met de ingebouwde types, we kunnen echter ook zelf onze types definiëren.
Hiervoor moeten we een onderscheid maken tussen de "simpele" en "complexe" types :

- elementen met een waarde, maar geen child elementen of attributen : xsd:simpleType
- elementen met child elementen of attributen : xsd:complexType

Eens dergelijke types zijn aangemaakt kunnen we elementen of attributen opnemen en hun (simple of complex) type opgeven in het type attribuut, bijvoorbeeld :

- elementen met naam element1 moeten tekst bevatten : <xsd:element name="element1" type="xsd:string"/>
- elementen met naam element2 moeten een waarde van type myType bevatten : <xsd:element name="element2" type="myType"/>
- attributen met naam attribute1 moeten tekst bevatten : <xsd:attribute name="attribute1" type="xsd:string"/>

Het type waarnaartoe verwezen in het type attribute van een xsd:attribute moet steeds een simpleType zijn.

Het is ook mogelijk om in een xsd:element of xsd:attribute te verwijzen naar het type van een ander element of attribuut, bijvoorbeeld : <xsd:element ref="element1"/>.
Hierbij neemt dit element (of attribuut) het type over van element1.

Een type of ref attribuut is dus steeds noodzakelijk om aan te geven wat het gebruikte type is.
Indien er een ref attribuut is, is er geen name attribuut aanwezig, want dan wordt naast type ook name overgenomen van dat gerefereerde globale type.
Bemerk dat het moet gaan om een globaal type om er naartoe te kunnen verwijzen in een ref attribuut.

30.2.1. Een Voorbeeld van een simpleType

Hier volgt een voorbeeld van een element tax van een simpel type taxPercentage die gebaseerd is op het type xsd:integer maar afdwingt dat de waarde in het bereik nul tot honderd ligt :
XML Schema Definition
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="tax" type="taxPercentage" />
  <xsd:simpleType name="taxPercentage">
    <xsd:restriction base="xsd:integer">
      <xsd:minInclusive value="0" />
      <xsd:maxInclusive value="100" />
    </xsd:restriction>
  </xsd:simpleType>
</xsd:schema>
De <xsd:restriction> node met attribuut base ingesteld op xsd:integer geeft hier aan hoe het gaat om een beperking van dit ingebouwde type.
Het zijn de facetten xsd:minInclusive en xsd:maxInclusive die aangeven wat juist de beperking is, of wat hier dus het gewenste bereik is.
Verderop meer over "restrictive" simpleTypes en facetten.

Volgend document voldoet aan dit schema :
XML Instantie
<?xml version="1.0" encoding="utf-8" ?>
<tax>0</tax>
Volgend document voldoet echter niet aan dit schema :
XML Instantie
<?xml version="1.0" encoding="utf-8" ?>
<tax>101</tax>
101 valt immers net niet meer in het toegestane bereik.

30.2.2. Anonieme Type Definities

Vorig schema bestond uit één rootelement waar in het type attribuut werd aangegeven dat de waarde van dit element van type taxPercentage moet zijn.

De aparte type definitie van taxPercentage maakt het natuurlijk mogelijk dat we in meerdere elementen of attributen naar dit type verwijzen.
Indien men in het schema echter slechts éénmalig dergelijke type wil gebruiken mag men dit ook anoniem (zonder name attribute) definiëren :
XML Schema Definition
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="tax">
    <xsd:simpleType>
      <xsd:restriction base="xsd:integer">
        <xsd:minInclusive value="0" />
        <xsd:maxInclusive value="100" />
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:element>
</xsd:schema>
Bemerk hoe de <xsd:simpleType> node hier een childnode is van <xsd:element> en hoe het geen name attribuut meer bevat, en trouwens ook niet meer mag bevatten.

Dit schema stelt exact hetzelfde data model voorop als het daarvoor vermelde schema, opnieuw is onderstaand XML document dus conform dit schema :
XML Instantie
<?xml version="1.0" encoding="utf-8" ?>
<tax>0</tax>
Of niet conform aan het schema :
XML Instantie
<?xml version="1.0" encoding="utf-8" ?>
<tax>101</tax>

30.2.3. Een Voorbeeld van een complexType

Om in een XML document een <article> node met price attribute van type xsd:decimal en childnode <name> te kunnen plaatsen, kunnen we volgend schema opstellen :
XML Schema Definition
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element type="article" name="article"/>
  <xsd:complexType name="article">
    <xsd:sequence>
      <xsd:element name="name" type="xsd:string" />
    </xsd:sequence>
    <xsd:attribute name="price" type="xsd:decimal" />
  </xsd:complexType>
</xsd:schema>
In de <xsd:sequence> childnode van <xsd:complexType> is een element node voor de childnodes <name> opgenomen.
De <xsd:complexType> node maakt ook gebruik van een <xsd:attribute> childnode om aan te geven dat het article element een price attribuut kan bevatten.

Verderop vind je meer informatie over hoe men complexe types kan definiëren.

Volgende XML documenten zijn conform dit schema :
XML Instantie
<?xml version="1.0" encoding="utf-8" ?>
<article price="9.99">
  <name>Hat</name>
</article>
XML Instantie
<?xml version="1.0" encoding="utf-8" ?>
<article price="4.99">
  <name>Glasses</name>
</article>
Het spreekt voor zich dat ook voor complexTypes anonieme type definities worden gebruikt :
XML Schema Definition
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="article">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="name" type="xsd:string" />
      </xsd:sequence>
      <xsd:attribute name="price" type="xsd:decimal" />
    </xsd:complexType>
  </xsd:element>
</xml:schema>
De <xsd:complexType> node is dan een childnode van de <xsd:element> node.

Dit artikel is gepubliceerd op maandag 15 oktober 2012 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.