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.5. XSD Restrictive simpleType Definities en Facetten

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.

Nieuwe simpleTypes kan men definiëren door deze af te leiden van bestaand simple types.

Dit afleiden kan van eerder atomische ingebouwde types als xsd:string, xsd:integer, ..., maar kan ook van zelf opgestelde simpleTypes.
Het afleiden kan bestaan uit het beperken van bepaalde "facetten" van een bestaand type.  Hiervoor gebruiken we het <xsd:restriction> element, deze geeft aan (via het base attribuut) van welk type wordt afgeleidt en welke facetten worden beperkt.

30.5.1. minInclusive, maxInclusive, minExclusive en maxExclusive Facetten

Facetten als minInclusive, maxInclusive, minExclusive en maxExclusive kan men gebruiken bij het afleiden van numerieke types om aan te geven wat het bereik is van een geldige waarde.

Zo zal volgend schema afdwingen dat de waarde voor tax elementen ligt van nul tot honderd, nul en honderd inclusief :
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>
Conform met dit schema zijn volgende XML documenten :
XML Instantie
<?xml version="1.0" encoding="utf-8" ?>
<tax>0</tax>
XML Instantie
<?xml version="1.0" encoding="utf-8" ?>
<tax>1</tax>
XML Instantie
<?xml version="1.0" encoding="utf-8" ?>
<tax>99</tax>
XML Instantie
<?xml version="1.0" encoding="utf-8" ?>
<tax>100</tax>
Niet conform zijn volgende documenten :
XML Instantie
<?xml version="1.0" encoding="utf-8" ?>
<tax>-1</tax>
XML Instantie
<?xml version="1.0" encoding="utf-8" ?>
<tax>101</tax>
-1 en 101 vallen immers buiten het bereik.

30.5.2. totalDigits Facet

Het facet totalDigits kan bij numerieke types gebruikt worden om aan te geven wat het maximum aantal te gebruiken cijfers zijn.

Volgend schema dwingt af dat de waarde van de ID elementen een xsd:integer waarde is bestaande uit maximaal drie cijfers :
XML Schema Definition
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="ID" type="ID" />
  <xsd:simpleType name="ID">
    <xsd:restriction base="xsd:integer">
      <xsd:totalDigits value="3" />
    </xsd:restriction>
  </xsd:simpleType>
</xsd:schema>
Volgende XML document zijn conform dit schema :
XML Instantie
<?xml version="1.0" encoding="utf-8" ?>
<ID>1</ID>
XML Instantie
<?xml version="1.0" encoding="utf-8" ?>
<ID>12</ID>
XML Instantie
<?xml version="1.0" encoding="utf-8" ?>
<ID>123</ID>
Niet conform dit schema is volgend XML document :
XML Instantie
<?xml version="1.0" encoding="utf-8" ?>
<ID>1234</ID>

30.5.3. fractionDigits Facet

Het fractionDigits facet is bruikbaar bij xsd:decimal om aan te geven hoeveel cijfers maximaal na het decimaal scheidingssymbool kunnen voorkomen.

In volgend schema wordt afgedwongen hoe een price element een xsd:decimal waarde bevat die maximaal twee cijfers na "de komma" bevat :
XML Schema Definition
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="price" type="price" />
  <xsd:simpleType name="price">
    <xsd:restriction base="xsd:decimal">
      <xsd:fractionDigits value="2" />
    </xsd:restriction>
  </xsd:simpleType>
</xsd:schema>
Conform dit schema zijn volgende XML documenten :
XML Instantie
<?xml version="1.0" encoding="utf-8" ?>
<price>4.85</price>
XML Instantie
<?xml version="1.0" encoding="utf-8" ?>
<price>4.9</price>
XML Instantie
<?xml version="1.0" encoding="utf-8" ?>
<price>5</price>
Niet conform dit schema is volgend document :
XML Instantie
<?xml version="1.0" encoding="utf-8" ?>
<price>4.849</price>

30.5.4. length, minLength en maxLength Facetten

Bij het afleiden van type xsd:string kan men aan de hand van facetten als length, minLength en maxLength bepalen wat de verwacht lengte is van een bepaald element of attribuut.

Volgend schema dwingt af dat de ID attribuutwaarde steeds bestaat uit exact drie karakters en dat de waarde van het element category bestaat uit een tekst van twee tot vier karakters :
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="category" type="category" />
      </xsd:sequence>
      <xsd:attribute name="ID" type="ID" />
    </xsd:complexType>
  </xsd:element>
  <xsd:simpleType name="ID">
    <xsd:restriction base="xsd:string">
      <xsd:length value="3" />
    </xsd:restriction>
  </xsd:simpleType>
  <xsd:simpleType name="category">
    <xsd:restriction base="xsd:string">
      <xsd:minLength value="2" />
      <xsd:maxLength value="4" />
    </xsd:restriction>
  </xsd:simpleType>
</xsd:schema>
Conform dit schema zijn volgende XML documenten :
XML Instantie
<?xml version="1.0" encoding="utf-8" ?>
<article ID="A01">
  <category>C1</category>
</article>
XML Instantie
<?xml version="1.0" encoding="utf-8" ?>
<article ID="A15">
  <category>C999</category>
</article>

30.5.5. Reguliere Expressies via het pattern Facet

Bij het afleiden van een bestaand simpleType kan men altijd aan de hand van een reguliere expressie beperkingen opleggen.

Zo zal volgend schema afdwingen dat de ID van een article steeds bestaat uit een karakter P gevolgd door twee cijfers :
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:attribute name="ID" type="ID" use="required" />
    </xsd:complexType>
  </xsd:element>
  <xsd:simpleType name="ID">
    <xsd:restriction base="xsd:string">
      <xsd:pattern value="P\d{2}" />
    </xsd:restriction>
  </xsd:simpleType>
</xsd:schema>
Volgend XML document is conform dit schema :
XML Instantie
<?xml version="1.0" encoding="utf-8" ?>
<article ID="P01" />
Niet conform is volgend XML document :
XML Instantie
<?xml version="1.0" encoding="utf-8" ?>
<article ID="Pa1" />
Het tweede karakter van de ID is immers geen cijfer.

Voor een volledig overzicht van de reguliere expressie mogelijkheden binnen XML schema kan je terecht op http://www.w3.org/TR/xmlschema-2/#regexs .

Hier werd nu het pattern facet geïllustreerd bij het afleiden van xsd:string.  Dit facet kan echt ook bij het afleiden van andere types worden gebruikt.

30.5.6. Enumeraties via het enumeration Facet

Waarneer slechts een beperkte reeks van mogelijke waardes mag gebruikt worden, kan men via het enumeration facet bij het afleiden van een bestaand simpleType opgeven welke waardes geldig zijn.

Zo zal volgend schema afdwingen dat enkel "marketing" en "sales" geldige waardes zijn voor een departement element :
XML Schema Definition
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="departement">
    <xsd:simpleType>
      <xsd:restriction base="xsd:string">
        <xsd:enumeration value="marketing" />
        <xsd:enumeration value="sales" />
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:element>
</xsd:schema>
Conform dit schema zijn volgende XML documenten :
XML Instantie
<?xml version="1.0" encoding="utf-8" ?>
<departement>marketing</departement>
XML Instantie
<?xml version="1.0" encoding="utf-8" ?>
<departement>sales</departement>
Niet conform dit schema is volgend XML document :
XML Instantie
<?xml version="1.0" encoding="utf-8" ?>
<departement>accountancy</departement>
Bijna elke simpleType, met uitzondering van xsd:boolean, kan beperkt worden via een enumeration facet.

De meeste maar niet alle mogelijke facetten voor simpleTypes zijn besproken, voor een vollediger overzicht kan je terecht op http://www.w3.org/TR/xmlschema-0/#SimpleTypeFacets .

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