# XML Schema

XML Schema (voluit: W3C XML Schema Definition Language (XSD)) is een taal voor het beschrijven van de structuur van XML-documenten, vastgelegd in standaarden van het W3C (World Wide Web Consortium). Tot nu toe zijn er twee versies gepubliceerd: 1.0 (uit 2004) en 1.1 (uit 2012). De taal is ontwikkeld als een opvolger van de 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-validatoren. 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.

## Schema's en Schemadocumenten

Een schema is in feite een verzameling van metadata bestaande uit een verzameling van schemacomponenten. Dit zijn voornamelijk element- en attribuutdeclaraties en complexe en eenvoudige typedefinities. Deze componenten worden meestal gemaakt door het verwerken van een verzameling van schemadocumenten waarin de brontaal van deze componenten gedefinieerd staat. Normaal gesproken worden schema documenten aangeduid als schema's.
Schemadocumenten zijn ingedeeld door een naamruimte: Alle benoemde schemacomponenten behoren tot een target namespace. Deze is een eigenschap (property) van het volledige schemadocument. Een schemadocument mag andere schemadocumenten met dezelfde naamruimte in zich opnemen en mag schemadocumenten uit een andere naamruimte 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 ervan uitgegaan dat het te valideren document gevalideerd wordt tegen het juiste schema. Omdat er geen gebruik wordt gemaakt van een naamruimte is daar geen garantie voor. "xsi" is bij conventie het voorvoegsel (prefix) voor een naamruimte. ("https://web.archive.org/web/20081013084129/http://www.w3.org/2001/XMLSchema-instance")
XML-Schemadocumenten 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.

## Datatypen

In tegenstelling tot DTD's staat een XML-schema toe dat de inhoud van een element of attribuut gevalideerd wordt tegen een datatype. Een attribuut mag bijvoorbeeld enkel een valide datum of decimaal getal bevatten.
XSD voorziet in het gebruik van 19 primitieve datatypen (boolean, string, decimal, double, float, anyURI, QName, Notation, hexBinary, base64Binary, duration, date, time, dateTime, gYear, gYearMonth, gMonth, gMonthDay, gDay; alle in Engelse notatie). Met behulp van deze primitieve datatypen kunnen nieuwe datatypen geconstrueerd worden op drie manieren: beperking (restriction) (beperk de verzameling van toegestane waarden), lijst (list) (reeks van primitieve waarden), en vereniging (union) (Een vereniging van verschillende primitieve waarden). Binnen de specificatie zijn vijfentwintig afgeleide datatypen gedefinieerd. Andere typen kunnen door de gebruikers in hun eigen schema's gedefinieerd worden. Een overzicht van de afgeleide datatypes vind je hier: http://msdn.microsoft.com/en-us/library/ms256052(v=vs.110).aspx.

## Voorbeeld van XML-Schema

Voorbeeld van een valide XML-document ten aanzien van het bovenstaande XML-Schema (huisdier.xsd):
* ↑ W3C, XML Schema Current Status. W3C. Geraadpleegd op 2 mei 2013.
* ↑ RFC 3023