« XML Schema » : différence entre les versions

De EduTech Wiki
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
 
(8 versions intermédiaires par 3 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
= Description  =
= Description  =
Un schéma, comme une [[DTD]], définit la structure d'un document XML.  
Les '''XML''' '''Schemas Definition (XSD)''' sont en train de remplacer progressivement les DTD. Ces schémas, au même titre qu'une [[DTD]], permettent de définir la structure d'un document XML. Ils ont été créés pour '''combler les lacunes des documents DTD''' qui :
* ne sont pas au format XML; ce qui veut dire qu'il est nécessaire d'utiliser un outil différent de celui qui exploite XML.
* ne permettent pas le "typage des données", ce qui veut qu'on peut qu'une balise contient des données mais qu'il est impossible de spécifier l'attribut. Par exemple, on peut vouloir que l'attribut ne soit qu'un nombre entier, qu'une chaîne de caractère.
* ne supportent pas les "espaces de noms" c'est à dire qu'il est impossible d'importer des définitions de balises qui ont été définies ailleurs, dans un autre XML associé à un DTD.


Les schémas ont été crée pour combler les '''lacunes des documents DTD''' qui :
Les XSD proposent les mêmes fonctionnalités que les DTD et en apportent de nouvelles comme :
* Les DTD ne sont pas au format XML; ce qui veut dire qu'il est nécessaire d'utiliser un outil différent de celui qui exploite XML
* l'introduction du "typage des données".
* Les DTD ne permettent pas le "typage des données", ce qui veut qu'on peut qu'une balise contient des données mais qu'il est impossible de spécifier l'attribut. Par exemple, on peut vouloir que l'attribut ne soit qu'un nombre entier, qu'une chaîne de caractère.
* le support des espaces de noms.
* Les DTD ne supportent pas les "espaces de noms" c'est à dire qu'il est impossible d'importer des définitions de balises qui ont été définies ailleurs, dans un autre XML associé à un DTD.
* la notion d'héritage: les éléments peuvent hériter du contenu et des attributs d'un autre élément.
Un autre avantage du XS est qu'il est lui même fait en XML, ce qui permet d'utiliser des outils tels que les validateurs ou les parseurs sur un document XSD. Ils sont par conséquent plus lisibles. De plus, le XSD permet une gestion beaucoup plus précise de la structure des documents, des types de données, des formats, du nombre d'occurrences ou encore de l'ordre des nœuds enfants. Un autre avantage de XSD est que l'on peut réutiliser les schémas dans d'autres schémas et en inclure plusieurs.


Les '''apports des schémas'''
Le XSD est plus complexe que le DTD mais de ce fait aussi bien plus puissant. Il est notamment utilisé dans les webservices en combinaison avec les WSDL.
C'est pour pallier aux défauts des DTD que les schémas XML ont été crées. Ils proposent les mêmes fonctionnalités que les DTD et en apportent de nouvelles comme :
* L'introduction du "typage des données"
* Le support des espaces de noms
* La notion d'héritage. Les éléments peuvent hériter du contenu et des attributs d'un autre élément.


= Structure et référencement d'un schéma XML =
= Structure et référencement d'un schéma XML =
== Extension de fichier ==
== Extension de fichier ==
Comme pour les DTD, le Schéma XML est un fichier distinct du fichier XML.  
Comme pour les DTD, le XSD est un fichier distinct du fichier XML.  
Cependant, bien qu'écrit en XML, le fichier n'a pas l'extension XML mais <code> .xsd</code>
Cependant, bien qu'écrit en XML, le fichier n'a pas l'extension XML mais <code> .xsd</code>


Ligne 33 : Ligne 33 :
</xs:schema>
</xs:schema>
</source>
</source>
Tous les éléments doivent être déclarés à l'intérieur de l'élément racine.


= Déclaration d'éléments et d'attributs =
= Déclaration d'éléments et d'attributs =
{{Ebauche}}
 
Pour créer des éléments, on utilise la balise  
==Eléments simples==
 
Il existe deux sortes d'éléments : les éléments simples (qui ne contiennent que du texte, et pas d'autre éléments) et les éléments complexes (qui contiennent un ou plusieurs éléments ou attributs enfants ).
 
Pour créer des éléments simples, on utilise la balise  
<source lang="xml">
<xs:element/>
</source>
 
Cette balise peut prendre différentes valeurs :
*'''name'''
Cet attribut est obligatoire et permet de nommer l'élément
*'''type'''
Permet de définir le type de données de l'élément.
 
*'''default'''
permet de définir une valeur par défaut qui sera utilisée pour l'élément en question si une aucune valeur n'est spécifiée pour cet élément dans le document XML.
<source lang="xml">
<source lang="xml">
<xs:element> </xs:element>
<xs:element name="color" type="xs:string" default="red"/>
</source>
</source>


Cette balise peut prendre différents attributs, dont l'attribut "name" qui est obligatoire et permet de nommer l'élément, et l'attribut "type" qui permet de définir le type de données de l'élément.  
*'''fixed'''
permet de définir une valeur fixe pour l'élément, qui ne pourra pas être modifiée dans le document XML.
 


Il existe deux sortes d'éléments : les éléments simples (qui ne contiennent pas d'autre élément) et les éléments complexes (qui contiennent un ou plusieurs éléments enfants).
Voici un exemple d'une déclaration d'éléments :
Voici un exemple d'une déclaration d'éléments :


<source lang="xml">
<source lang="xml">
<xs:element name="note">
<xs:element name="to" type="xs:string"/>
  <xs:complexType>
</source>
    <xs:sequence>
 
      <xs:element name="to" type="xs:string"/>
==Eléments complexes==
      <xs:element name="from" type="xs:string"/>
 
       <xs:element name="heading" type="xs:string"/>
Les éléments complexes sont des éléments qui peuvent contenir des attributs et d'autres éléments. Ils sont créés dans le cas où il n'est pas possible de se contenter d'un ''xs:int'' ou ''xs:string'' ou autre. Ils permettent de gérer des données pouvant être réutilisées dans d'autres éléments de la page.
       <xs:element name="body" type="xs:string"/>
 
Les éléments complexes sont déclarés avec une balise double à l'intérieur de laquelle on trouve différentes balises :
<source lang="xml">
<xs:element name="employee"> <!--élément qui contient d'autres éléments-->
  <xs:complexType> <!--cette balise contient les éléments et/ou attributs qui iront dans l'élément complexe-->
    <xs:sequence> <!--cette balise entoure les éléments enfants, et définit leur ordre-->
       <xs:element name="firstname" type="xs:string"/>
       <xs:element name="lastname" type="xs:string"/>
     </xs:sequence>
     </xs:sequence>
   </xs:complexType>
   </xs:complexType>
Ligne 59 : Ligne 85 :
</source>
</source>


Tous les éléments doivent être déclarés à l'intérieur de l'élément racine (<xs:schema>).
Cette déclaration est une déclaration directe. Dans ce cas, seul l'élément "employee" contient ces éléments enfants.
Pour appliquer une structure d'élément complexe à plusieurs éléments, on peut faire une déclaration indirecte à l'aide d'un attribut :
<source lang="xml">
<xs:element name="employee" type="personinfo"/><!--Ces trois éléments déclarés comme simples ont un attribut "personinfo"-->
<xs:element name="student" type="personinfo"/>
<xs:element name="member" type="personinfo"/>
 
<xs:complexType name="personinfo"><!--L'attribut personinfo fait référence à cette balise de type complexe, qui contient des éléments enfants-->
  <xs:sequence>
    <xs:element name="firstname" type="xs:string"/>
    <xs:element name="lastname" type="xs:string"/>
  </xs:sequence>
</xs:complexType>
</source>
 
Ainsi les trois éléments "simples" décalrés au débuts, deviennent des éléments complexes en leur attribuant les éléments contenus dans la balise complexType.
De cette façon, plusieurs éléments peuvent faire référence à la même structure complexe, sans avoir besoin de la répéter.
 
==Attributs==
 
Dans le document XML, les éléments peuvent prendre des attributs. Par exemple :
<source lang="xml">
<lastname lang="EN">Smith</lastname>
</source>
 
Cet attribut doit être déclaré dans le schéma XML en même temps que les éléments. On déclare les attributs de la même manière que les éléments simples :
<source lang="xml">
<xs:attribute name="lang" type="xs:string"/>
</source>


= Type de données =
Les attributs peuvent prendre les mêmes valeurs que les éléments simples (name, type, default, fixed), et en plus ils peuvent prendre la valeur "use='required'" pour rendre l'attribut obligatoire.
 
= Type de données et restrictions=
{{Ebauche}}
{{Ebauche}}
Les schémas XML permettent de définir différents types de données pour les éléments du schéma. Les plus communs sont :
*xs:string
*xs:decimal
*xs:integer
*xs:boolean
*xs:date
*xs:time
Voici la liste complète de types de données dans le [https://www.w3.org/TR/xmlschema11-2/ site officiel de W3C].


= Liens =  
= Liens =  
* [http://www.w3schools.com/xml/schema_intro.asp XML Schema Tutorial] de W3 Schools
* [http://www.w3schools.com/xml/schema_intro.asp XML Schema Tutorial] de W3 Schools
* Tutoriel [http://gilles-chagnon.developpez.com/cours/xml/dtd-et-schemas/?page=schemas#LII-A-1 Définir le format d'un document XML : DTD et Schémas] (très complet).
* Tutoriel [http://gilles-chagnon.developpez.com/cours/xml/dtd-et-schemas/?page=schemas#LII-A-1 Définir le format d'un document XML : DTD et Schémas] (très complet).


[[Category: XML]]
[[Category: XML]]

Dernière version du 22 août 2021 à 17:21

Description

Les XML Schemas Definition (XSD) sont en train de remplacer progressivement les DTD. Ces schémas, au même titre qu'une DTD, permettent de définir la structure d'un document XML. Ils ont été créés pour combler les lacunes des documents DTD qui :

  • ne sont pas au format XML; ce qui veut dire qu'il est nécessaire d'utiliser un outil différent de celui qui exploite XML.
  • ne permettent pas le "typage des données", ce qui veut qu'on peut qu'une balise contient des données mais qu'il est impossible de spécifier l'attribut. Par exemple, on peut vouloir que l'attribut ne soit qu'un nombre entier, qu'une chaîne de caractère.
  • ne supportent pas les "espaces de noms" c'est à dire qu'il est impossible d'importer des définitions de balises qui ont été définies ailleurs, dans un autre XML associé à un DTD.

Les XSD proposent les mêmes fonctionnalités que les DTD et en apportent de nouvelles comme :

  • l'introduction du "typage des données".
  • le support des espaces de noms.
  • la notion d'héritage: les éléments peuvent hériter du contenu et des attributs d'un autre élément.

Un autre avantage du XS est qu'il est lui même fait en XML, ce qui permet d'utiliser des outils tels que les validateurs ou les parseurs sur un document XSD. Ils sont par conséquent plus lisibles. De plus, le XSD permet une gestion beaucoup plus précise de la structure des documents, des types de données, des formats, du nombre d'occurrences ou encore de l'ordre des nœuds enfants. Un autre avantage de XSD est que l'on peut réutiliser les schémas dans d'autres schémas et en inclure plusieurs.

Le XSD est plus complexe que le DTD mais de ce fait aussi bien plus puissant. Il est notamment utilisé dans les webservices en combinaison avec les WSDL.

Structure et référencement d'un schéma XML

Extension de fichier

Comme pour les DTD, le XSD est un fichier distinct du fichier XML. Cependant, bien qu'écrit en XML, le fichier n'a pas l'extension XML mais .xsd

Prologue et élément racine

Comme le document XML, le Schéma XML commence par un prologue et a un élément racine:

  • Prologue : <?xml version="1.0" encoding="UTF-8" ?>.
  • Element racine : xsd:schema..

Voici le code associé :

<!-- Prologue -->
<?xml version="1.0" encoding="UTF-8" ?>

<!-- Elément racine -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
</xs:schema>

Tous les éléments doivent être déclarés à l'intérieur de l'élément racine.

Déclaration d'éléments et d'attributs

Eléments simples

Il existe deux sortes d'éléments : les éléments simples (qui ne contiennent que du texte, et pas d'autre éléments) et les éléments complexes (qui contiennent un ou plusieurs éléments ou attributs enfants ).

Pour créer des éléments simples, on utilise la balise

<xs:element/>

Cette balise peut prendre différentes valeurs :

  • name

Cet attribut est obligatoire et permet de nommer l'élément

  • type

Permet de définir le type de données de l'élément.

  • default

permet de définir une valeur par défaut qui sera utilisée pour l'élément en question si une aucune valeur n'est spécifiée pour cet élément dans le document XML.

<xs:element name="color" type="xs:string" default="red"/>
  • fixed

permet de définir une valeur fixe pour l'élément, qui ne pourra pas être modifiée dans le document XML.


Voici un exemple d'une déclaration d'éléments :

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

Eléments complexes

Les éléments complexes sont des éléments qui peuvent contenir des attributs et d'autres éléments. Ils sont créés dans le cas où il n'est pas possible de se contenter d'un xs:int ou xs:string ou autre. Ils permettent de gérer des données pouvant être réutilisées dans d'autres éléments de la page.

Les éléments complexes sont déclarés avec une balise double à l'intérieur de laquelle on trouve différentes balises :

<xs:element name="employee"> <!--élément qui contient d'autres éléments-->
  <xs:complexType> <!--cette balise contient les éléments et/ou attributs qui iront dans l'élément complexe-->
    <xs:sequence> <!--cette balise entoure les éléments enfants, et définit leur ordre-->
      <xs:element name="firstname" type="xs:string"/>
      <xs:element name="lastname" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

Cette déclaration est une déclaration directe. Dans ce cas, seul l'élément "employee" contient ces éléments enfants. Pour appliquer une structure d'élément complexe à plusieurs éléments, on peut faire une déclaration indirecte à l'aide d'un attribut :

<xs:element name="employee" type="personinfo"/><!--Ces trois éléments déclarés comme simples ont un attribut "personinfo"-->
<xs:element name="student" type="personinfo"/>
<xs:element name="member" type="personinfo"/>

<xs:complexType name="personinfo"><!--L'attribut personinfo fait référence à cette balise de type complexe, qui contient des éléments enfants-->
  <xs:sequence>
    <xs:element name="firstname" type="xs:string"/>
    <xs:element name="lastname" type="xs:string"/>
  </xs:sequence>
</xs:complexType>

Ainsi les trois éléments "simples" décalrés au débuts, deviennent des éléments complexes en leur attribuant les éléments contenus dans la balise complexType. De cette façon, plusieurs éléments peuvent faire référence à la même structure complexe, sans avoir besoin de la répéter.

Attributs

Dans le document XML, les éléments peuvent prendre des attributs. Par exemple :

<lastname lang="EN">Smith</lastname>

Cet attribut doit être déclaré dans le schéma XML en même temps que les éléments. On déclare les attributs de la même manière que les éléments simples :

<xs:attribute name="lang" type="xs:string"/>

Les attributs peuvent prendre les mêmes valeurs que les éléments simples (name, type, default, fixed), et en plus ils peuvent prendre la valeur "use='required'" pour rendre l'attribut obligatoire.

Type de données et restrictions

Cet article est une ébauche à compléter. Une ébauche est une entrée ayant un contenu (très) maigre et qui a donc besoin d'un auteur.

Les schémas XML permettent de définir différents types de données pour les éléments du schéma. Les plus communs sont :

  • xs:string
  • xs:decimal
  • xs:integer
  • xs:boolean
  • xs:date
  • xs:time

Voici la liste complète de types de données dans le site officiel de W3C.

Liens