Latest web development tutorials

instance XML Schema

Cette section va vous montrer comment écrire un schéma XML. Vous apprendrez également différentes façons d'écrire le schéma.


Les documents XML

Regardons cela, appelé document XML "de shiporder.xml":

<?xml version="1.0" encoding="ISO-8859-1"?>

<shiporder orderid="889923"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="shiporder.xsd">
<orderperson>John Smith</orderperson>
<shipto>
<name>Ola Nordmann</name>
<address>Langgt 23</address>
<city>4000 Stavanger</city>
<country>Norway</country>
</shipto>
<item>
<title>Empire Burlesque</title>
<note>Special Edition</note>
<quantity>1</quantity>
<price>10.90</price>
</item>
<item>
<title>Hide your heart</title>
<quantity>1</quantity>
<price>9.90</price>
</item>
</shiporder>

L'élément ci-dessus du document XML racine "de ShipOrder", qui contient l'attribut doit être nommé "orderid" de. élément "ShipOrder" contient trois éléments enfants différents: "orderperson", "shipTo" et "item". "Item" élément apparaît deux fois, et il contient un "titre", un élément facultatif "note", une "quantité" et un des éléments «prix».

Les xmlns ligne ci-dessus: xsi = "http://www.w3.org/2001/XMLSchema-instance", a déclaré un schéma basé sur l'analyseur XML pour valider ce document. La ligne: xsi: noNamespaceSchemaLocation = schéma "de shiporder.xsd" définit la position (dans ce cas, il "shiporder.xml" dans le même dossier).


Créer un schéma XML

Maintenant, nous avons besoin de créer un schéma pour le document XML ci-dessus.

Nous pouvons commencer par l'ouverture d'un nouveau fichier et ce fichier est nommé "shiporder.xsd". Pour créer un schéma, nous avons juste besoin de simplement suivre la structure du document XML, chaque élément de la définition de ce que nous avons trouvé. Tout d'abord, nous commençons à définir une déclaration XML standard:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
...
</xs:schema>

Dans le schéma ci-dessus, nous utilisons l'espace de noms standard (xs), l'espace URI associé à ce nom est la définition du langage de schéma de (définition du langage Schema), sa valeur standard est http://www.w3.org/ 2001 / XMLSchema.

Ensuite, nous avons besoin de définir l'élément "ShipOrder". Cet élément a une propriété qui contient d'autres éléments, par conséquent, nous avons identifié comme un type complexe. Sous-élément élément "ShipOrder" est xs: sequence élément entouré définit l'ordre des sous-éléments:

<xs:element name="shiporder">
<xs:complexType>
<xs:sequence>
...
</xs:sequence>
</xs:complexType>
</xs:element>

Ensuite, nous devons "orderperson" élément est défini comme un type simple (car il ne contient pas d'attributs ou d'autres éléments). Type (xs: string) est préfixé par les dispositions de préfixe d'espace de noms de cet espace de noms et des instructions prédéfinies schéma schéma types de données XML associés à:

<xs:element name="orderperson" type="xs:string"/>

Ensuite, je dois les deux éléments définis comme type complexe: "shipTo" et "item". Nous commençons par définir "shipTo" élément commence:

<xs:element name="shipto">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="address" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>

Par schéma, on peut définir le nombre de fois qu'un élément peut se produire en utilisant maxOccurs et minOccurs attributs. maxOccurs définissent un nombre maximum d'éléments apparaissent, et minOccurs définit le nombre minimum d'occurrences d'un élément. Par défaut maxOccurs et minOccurs est 1!

Maintenant, nous pouvons définir l'élément "item" de. Cet élément peut apparaître plusieurs fois dans l'élément "ShipOrder". Cela se fait par le "point" élément maxOccurs valeur de l'attribut est réglé sur "unbounded" pour atteindre, de sorte que l'élément "item" peut être le créateur apparaît autant de fois que désiré. S'il vous plaît noter, "note" élément est facultatif. Nous avons minOccurs attribut de cet élément est réglé sur 0 sur:

<xs:element name="item" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string"/>
<xs:element name="note" type="xs:string" minOccurs="0"/>
<xs:element name="quantity" type="xs:positiveInteger"/>
<xs:element name="price" type="xs:decimal"/>
</xs:sequence>
</xs:complexType>
</xs:element>

Nous pouvons maintenant déclarer "ShipOrder" attribut de l'élément. Comme il est un attribut obligatoire, nous spécifions l'utilisation = "nécessaire".

Remarque: Cette propriété doit être déclarée sur le dernier:

<xs:attribute name="orderid" type="xs:string" use="required"/>

Voici une liste de documents, appelé "shiporder.xsd" le fichier de schéma:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="shiporder">
<xs:complexType>
<xs:sequence>
<xs:element name="orderperson" type="xs:string"/>
<xs:element name="shipto">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="address" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="item" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string"/>
<xs:element name="note" type="xs:string" minOccurs="0"/>
<xs:element name="quantity" type="xs:positiveInteger"/>
<xs:element name="price" type="xs:decimal"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="orderid" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>

</xs:schema>


schéma de Split

En face de la méthode de conception est très facile, mais il est difficile à lire et à conserver des documents sont Shique complexe.

Ensuite, basé sur la méthode de conception décrite dans la première définition de tous les éléments et attributs, puis utilisez l'attribut ref pour les désigner.

Cette nouvelle approche est conçue fichier de schéma ( "de shiporder.xsd"):

<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<!-- definition of simple elements -->
<xs:element name="orderperson" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
<xs:element name="address" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
<xs:element name="title" type="xs:string"/>
<xs:element name="note" type="xs:string"/>
<xs:element name="quantity" type="xs:positiveInteger"/>
<xs:element name="price" type="xs:decimal"/>

<!-- definition of attributes -->
<xs:attribute name="orderid" type="xs:string"/>

<!-- definition of complex elements -->
<xs:element name="shipto">
<xs:complexType>
<xs:sequence>
<xs:element ref="name"/>
<xs:element ref="address"/>
<xs:element ref="city"/>
<xs:element ref="country"/>
</xs:sequence>
</xs:complexType>
</xs:element>

<xs:element name="item">
<xs:complexType>
<xs:sequence>
<xs:element ref="title"/>
<xs:element ref="note" minOccurs="0"/>
<xs:element ref="quantity"/>
<xs:element ref="price"/>
</xs:sequence>
</xs:complexType>
</xs:element>

<xs:element name="shiporder">
<xs:complexType>
<xs:sequence>
<xs:element ref="orderperson"/>
<xs:element ref="shipto"/>
<xs:element ref="item" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute ref="orderid" use="required"/>
</xs:complexType>
</xs:element>

</xs:schema>


Utilisation du type spécifié (Types Nommé)

La troisième méthode de conception définit une classe ou d'un type, de sorte que nous avons la possibilité de définir des éléments réutilisables. Approche spécifique est: premier élément de simple et complexe nom des éléments, puis tapez attribut de l'élément pour pointer vers eux

Cette troisième méthode est l'utilisation du fichier de schéma de conception ( "de shiporder.xsd"):

<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:simpleType name="stringtype">
<xs:restriction base="xs:string"/>
</xs:simpleType>

<xs:simpleType name="inttype">
<xs:restriction base="xs:positiveInteger"/>
</xs:simpleType>

<xs:simpleType name="dectype">
<xs:restriction base="xs:decimal"/>
</xs:simpleType>

<xs:simpleType name="orderidtype">
<xs:restriction base="xs:string">
<xs:pattern value="[0-9]{6}"/>
</xs:restriction>
</xs:simpleType>

<xs:complexType name="shiptotype">
<xs:sequence>
<xs:element name="name" type="stringtype"/>
<xs:element name="address" type="stringtype"/>
<xs:element name="city" type="stringtype"/>
<xs:element name="country" type="stringtype"/>
</xs:sequence>
</xs:complexType>

<xs:complexType name="itemtype">
<xs:sequence>
<xs:element name="title" type="stringtype"/>
<xs:element name="note" type="stringtype" minOccurs="0"/>
<xs:element name="quantity" type="inttype"/>
<xs:element name="price" type="dectype"/>
</xs:sequence>
</xs:complexType>

<xs:complexType name="shipordertype">
<xs:sequence>
<xs:element name="orderperson" type="stringtype"/>
<xs:element name="shipto" type="shiptotype"/>
<xs:element name="item" maxOccurs="unbounded" type="itemtype"/>
</xs:sequence>
<xs:attribute name="orderid" type="orderidtype" use="required"/>
</xs:complexType>

<xs:element name="shiporder" type="shipordertype"/>

</xs:schema>

élément de restriction indiquant le type de données provenant de l'espace de noms datatype schéma XML du W3C. Par conséquent, le fragment suivant signifie que la valeur de la valeur de l'élément ou de l'attribut doit être un type de chaîne:

<xs:restriction base="xs:string">

élément de restriction souvent utilisé pour imposer des restrictions aux éléments. Considérons le fragment suivant à partir du schéma ci-dessus:

<xs:simpleType name="orderidtype">
<xs:restriction base="xs:string">
<xs:pattern value="[0-9]{6}"/>
</xs:restriction>
</xs:simpleType>

Ce code indique que la valeur de l'élément ou de l'attribut doit être une chaîne, et doit être de six caractères consécutifs, et ces caractères doit être 0-9.