XML Schema Definitietaal
XML Schema is een taal voor het beschrijven van de structuur van XML-documenten. De formele taal van XML Schema, XSD of XML Schema Definitietaal (Engels: XML Schema Definition Language), is een standaard van het W3C (World Wide Web Consortium). Het is ontwikkeld als een opvolger van het eerder ontwikkelde DTD.
In XML Schema kan men schema's maken voor bijvoorbeeld XML-documenten, waarmee deze documenten formeel worden gespecificeerd, en op grond waarvan zij kunnen worden gevalideerd, bijvoorbeeld door XML-validators. Een XML Schema geeft hiervoor onder meer aan wat de elementen zijn van een XML-document, waar zij voorkomen, wat de kenmerken zijn waaraan ze moeten voldoen, enzovoorts. Zeer simplistisch uitgedrukt kan een XML Schema onder meer aangeven wat voor soort tags in een XML-document mogen voorkomen.
Een XML-document kan correct (welgevormd) zijn ten aanzien van de algemene XML-standaard, maar desondanks niet valide ten aanzien van een gegeven XML-schema.
Voordeel van XSD boven DTD is dat XSD krachtiger en flexibeler is, en minder cryptisch. Verder kan een XSD zelf ook in XML worden weergegeven, in tegenstelling tot DTD. Veel specificaties zijn echter al in DTD weergegeven, en wat dat betreft heeft XSD als het ware voor een deel een inhaalslag te maken, ook wat betreft software die de standaard ondersteunt.
XML-schema's worden standaard opgeslagen in bestandsnamen met de bestandsextensie .xsd.
[bewerken] Schema's en Schema Documents
Een schema is in feite een verzameling van metadata bestaande uit een set van schema componenten. Dit zijn voornamelijk element- en attribuutdeclaraties en complexe en eenvoudige type definities. Deze componenten worden meestal gemaakt door het verwerken van een verzameling van schema documenten waarin de brontaal van deze componenten gedefinieerd staat. Normaal gesproken worden schema documenten aangeduid als schema's.
Schema documenten zijn ingedeeld door een namespace: Alle benoemde schema componenten behoren tot een target namespace . Deze is een eigenschap (property) van het volledige schema document. Een schema document mag andere schema documenten met dezelfde namespace in zich opnemen en mag schema documenten uit een andere namespace importeren.
Als een XML-document wordt gevalideerd tegen een schema (beoordelen) kan het gebruikte schema als parameter opgegeven worden aan de validatie engine of er kan direct naar het juiste schema verwezen worden vanuit het betreffende XML-document door middel van twee speciale attributen: xsi:schemaLocation en xsi:noNamespaceSchemaLocation Bij het laatste attribuut wordt er vanuit gegaan dat het te valideren document gevalideerd wordt tegen het juiste schema. Omdat er geen gebruik wordt gemaakt van een namespace is daar geen garantie voor. "xsi" is bij conventie het voorvoegsel (prefix) voor een namespace. ("http://www.w3.org/2001/XMLSchema-instance")
XML Schema Documenten hebben normaal gesproken de extensie ".xsd". Een uniek Internet Media Type (MIME type) is nog niet vastgesteld. dus "application/xml" of "text/xml" zou gebruikt moeten worden zoals omschreven in RFC 3023.
[bewerken] Data typen
In tegenstelling tot DTD's staat een XML schema toe dat de inhoud van een element of attribuut gevalideerd wordt tegen een data type. Een attribuut mag bijvoorbeeld enkel een valide datum of decimaal nummer bevatten.
XSD voorziet in het gebruik van 19 primitieve data typen (boolean, string, decimal, double, float, anyURI, QName, hexBinary, base64Binary, duration, date, time, dateTime, gYear, gYearMonth, gMonth, gMonthDay, gDay, en NOTATION). Van deze primitieve datatypen kunnen nieuwe datatypes geconstrueerd worden op drie manieren: restriction (Beperk de set van toegestane waarden), list (Reeks van primitieve waarden), en union (Een mix van verschillende primitieve waarden). Binnen de specificatie zijn vijfentwintig afgeleide typen gedefinieerd. Andere typen kunnen door de gebruikers in hun eigen schema's gedefinieerd worden.
[bewerken] Voorbeeld van XML Schema
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="huisdier"> <xs:complexType> <xs:sequence> <xs:element name="soort" type="xs:string"/> <xs:element name="naam" type="xs:string"/> <xs:element name="geboortedatum" type="xs:date"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
Voorbeeld van een valide XML-document ten aanzien van het bovenstaande XML Schema (huisdier.xsd):
<?xml version="1.0" encoding="UTF-8"?> <huisdier xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="huisdier.xsd"> <soort>Kanarie</soort> <naam>Geeltje</naam> <geboortedatum>2000-02-15</geboortedatum> </huisdier>