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.1. XML Schema (XSD) Opstellen

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.

We kunnen zelf onze eigen XML schemas (XSD's) opstellen, om onze XML documenten te valideren.
Visual Studio : Een XSD document die in een Visual Basic project wordt toegevoegd, zorgt voor IntelliSence bij het gebruik van XML axis properties en XML literals.

30.1.1. Schema Template

XML Schema Definition
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
	...
</xsd:schema>
Het root element in XML schema is schema.  Het attribuut xmlns (XML NameSpace) heeft aan welk schema het vocabulair - uit dit document/schema - voldoet.  Of met andere woorden in welke naming space de elementen zijn gedefinieerd die we in dit schema gaan gebruiken.
Hier werd het attribuut ingesteld op een bepaalde URL door die toe te kennen aan het attribuut xmlns (xmlns="http://www.w3.org/2001/XMLSchema").  Over het algemeen is een xmlns een URI (Uniform Resource Indentifier), dit kan een URN zijn (Uniform Resource Name) of een URL (Uniform Resource Locator).

De notatie die in bovenstaand voorbeeld wordt gebruikt, associeert ook een prefix/alias aan deze namespace (xmlns:xsd="..."), doorgaans is dit voor deze namespace xs of xsd, maar dit kan in principe eender welke prefix zijn.
Deze prefix kunnen we vervolgens gebruiken om op verkorte manier aan te geven in welke namespace dit element of attribuut is gedefinieerd, bijvoorbeeld xsd:schema.

Voor de verdere uitleg wordt veronderstelt dat xsd steeds de prefix is van de namespace voor dit schema.

30.1.2. Enkele Voorgedefinieerde Types

Bij het opstellen van een schema zullen we elementen en attributen opnemen waarvan de waardes van een bepaald (data)type zijn.

Enkele voorgedefinieerde types zijn :

- xsd:string
- xsd:integer
- xsd:positiveInteger (> 0) en xsd:negativeInteger (< 0)
- xsd:nonNegativeInteger (>= 0) en xsd:nonPositiveInteger (<= 0)
- xsd:long (Long) en xsd:unsignedLong (ULong)
- xsd:int (Integer) en xsd:unsignedInt (UInteger)
- xsd:short (Short) en xsd:unsingedShort (UShort)
- xsd:byte (Byte)
- xsd:decimal (Decimal), xsd:float (Single) en xsd:double (Double)
- xsd:boolean (Boolean en "0" of "1")
- xsd:dateTime (bv "2009-04-29T14:15:16.000-03:00", dit is 3 uur voor Universal Time), xsd:date (bv "2009-04-29") en xsd:time (bv "14:15:16.000-03:00")
- xsd:gYear (bv "2009"), xsd:gMonthYear (bv "2009-04"), xsd:gMonth ( bv "--04"), xsd:gMonthDay (bv "--04-29") en xsd:gDay (bv "---29")

Tussen haakjes staat een voorbeeld of de corresponderende Visual Basic datatypes waaruit je ook het bereik kan afleiden.
Bekijk W3C (http://www.w3.org/TR/xmlschema-2/#built-in-datatypes) voor meer details en een volledig overzicht van alle ingebouwde types.

30.1.3. Een Schema Voorbeeld

Een voorbeeld van een schema waarin we één mogelijk rootelement met de naam price met een waarde van type positiveInteger toelaten :
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="xsd:positiveInteger"/>
</xsd:schema>
Conform aan dit schema is volgend XML document :
XML Instantie
<?xml version="1.0" encoding="utf-8" ?>
<price>5</price>
Niet conform aan dit schema is volgend XML document :
XML Instantie
<?xml version="1.0" encoding="utf-8" ?>
<price>-5</price>
In element price bevindt er zich hier immers een negatieve waarde.

De naam (name attribuut van xsd:element) mag nooit spaties bevatten, het mag ook niet starten met een cijfer.  Het is dan bijvoorbeeld weer wel toegelaten om karakters als een dot (.), dash (-) of underscore (_) te gebruiken.
Visual Studio : Als Visual Studio als XML editor wordt gebruikt en het hiervoor vermelde schema als validatie schema is ingesteld voor dit document (zie hiervoor de Schemas eigenschap van het XML document in het Properties toolvenster) zal volgende waarschuwing (in het Error List toolvenster) verschijnen : "The price element is invalid - The value -5 is invalid according to its datatype http://www.w3.org/2001/XMLSchema:positiveInteger - Value -5 was either too large or too small for PositiveInteger."
Passen we het schema aan om een xsd:string waarde mogelijk te maken :
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="xsd:string"/>
</xsd:schema>
Dan is elke document die voor price een tekstuele waarde bevat conform dit schema :
XML Instantie
<?xml version="1.0" encoding="utf-8" ?>
<price>hello world</price>
Ook conform zou een XML document zijn die voor price geen waarde bevat :
XML Instantie
<?xml version="1.0" encoding="utf-8" ?>
<price></price>
Dit zou niet het geval geweest zijn voor price van type positiveInteger, daar is geen waarde uiteraard ook geen geldige xsd:positiveInteger waarde.

Verderop meer over de mogelijkheid om elementen, attributen of waardes optioneel maken of een default waarde te geven.

30.1.4. Meerdere Globale Elementen in een Schema

Als verschillende XML documenten conform aan één bepaald schema verschillende rootelementen mogen bevatten, dan kan men in het schema meerdere globale elementen opnemen :
XML Schema Definition
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="EUR" type="xsd:decimal" />
  <xsd:element name="USD" type="xsd:decimal" />
</xsd:schema>
Globale elementen (of globale attributen) worden gecreëerd door declaraties die rechtstreekse childelementen zijn van het xsd:schema element.

Conform dit schema zijn volgende XML documenten :
XML Instantie
<?xml version="1.0" encoding="utf-8" ?>
<EUR>12.99</EUR>
XML Instantie
<?xml version="1.0" encoding="utf-8" ?>
<USD>14.99</USD>
Vergeet natuurlijk niet dat elk "well-formed" XML document volgens de W3C XML specificaties steeds slechts één rootelement bevat, volgend XML document is dan ook niet geldig :
XML Instantie
<?xml version="1.0" encoding="utf-8" ?>
<EUR>12.99</EUR>
<USD>14.99</USD>
Naast het rootelement (ook wel "document element" genoemd) mag een XML document uiteraard wel nog zaken als XML declaraties, DOCTYPE declaraties, processing instructions, whitespaces of bijvoorbeeld XML commentaar bevatten :
XML Instantie
<?xml version="1.0" encoding="utf-8" ?>
<EUR>12.99</EUR>
<!-- This is the price for our article. -->

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