UPPREVIOUSNEXT  Technologies Internet et Education, © TECFA
  3. XSD - structure du fichier et espaces de nom

3. XSD - structure du fichier et espaces de nom

3.1 Structure et espace de nom d’un fichier XSD

 

Espaces de noms (namespaces) et préfixes

A. Solution 1: Donner un namespace au code XSD

Exemple 3-1: XSD définition pour une simple recette de cuisine

<?xml version="1.0" encoding="UTF-8"?>
<!-- Simple recipe Schema -->
<xs:
schema
 xmlns:xs="http://www.w3.org/2001/XMLSchema"
           elementFormDefault="qualified
">
  <xs
:element name="list">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="recipe
"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
 

B. Solution 2: Donner un namespace au code du schéma

Exemple 3-2: XSD définition pour une simple recette

<schema
  xmlns='http://www.w3.org/2000/10/XMLSchema'
  targetNamespace='http://yourdomain.org/namespace/
'  xmlns:t='http://yourdomain.org/namespace/
'>
 <element name='t:list'>
  <complexType>
   <sequence>
    <element ref='t:recipe
' maxOccurs='unbounded'/>
   </sequence>
  </complexType>
 </element>
 

3.2 Validation

A. Association d’un XSD avec un fichier XML, Solution 1

XML file (recipe-no-ns.xml)

<?xml version="1.0" encoding="ISO-8859-1" ?>
<list
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:noNamespaceSchemaLocation="
recipe-no-ns.xsd
">
  <recipe> ....
</list>

XSD file (recipe-no-ns.xsd)

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           elementFormDefault="qualified">
  <xs:element name="list">

B. Association d’un XSD avec XML, Solution 2

Solution à retenir: L’idée est que chaque fragment XML fait tjrs partie d’un namespace:

  1. Les fichiers XML et XSD doivent inclure une namespace declaration pour un domaine

Le fichier XML doit inclure en plus:

  1. une déclaration pour le XMLSchema-instance namespace
  2. un attribut xsi:schemaLocation qui dit ou trouver XSD
    • Cet attribut peut contenir plusieurs pairs "namespace-URL"

Exemple 3-3: XML pour une recette avec une XSD associée (file recipe.xml)

XML file (recipe.xml)

<?xml version="1.0" encoding="ISO-8859-1" ?>
<list
  xmlns="http://myrecipes.org/"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="
http://myrecipes.org/
 
recipe.xsd
" 
>
  <recipe>
    <meta> .....</meta>
    ......
  </recipe>
</list>

En gros: Il faut substituer qc. pour le rose et le rouge ci-dessus. Faites attention à la syntaxe de l’attribut schemaLocation: " Namespace_url XSD_URL NameSpace_URL XSD_URL ..."

XSD file (recipe.xsd)

<?xml version="1.0" encoding="UTF-8"?>
<!-- Simple recipe Schema -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema
"	       targetNamespace="http://myrecipes.org/"
	       xmlns="http://myrecipes.org/"
	       elementFormDefault="qualified">
   ....
</xs:schema>
 
  • La XSD définit un namespace pour vos balises.
  • Il faut substituer http://myrecipes.org/" par un URL de votre choix, mais de préférence un URL sur lequel vous avez le contrôle (par exemple votre home page).

Exemple 3-4: IMS Content Packaging 1.1.4 et IMS/LOM Metadata

Le fichier XML

<manifest 
  xmlns
="http://www.imsglobal.org/xsd/imscp_v1p1"  xmlns:imsmd
="http://www.imsglobal.org/xsd/imsmd_v1p2" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  identifier="MANIFEST-1"
  xsi:schemaLocation=
   "http://www.imsglobal.org/xsd/imscp_v1p    imscp_v1p1.xsd     http://www.imsglobal.org/xsd/imsmd_v1p2    imsmd_v1p2p2.xsd">
 
 <metadata>
    <imsmd:lom> ......
   </imsmd:lom>
 </metadata>
 <organizations default="learning_sequence_1">
.....
  • Cet exemple montre comment utiliser deux espaces de nom pour deux XSD
  • imscp_v1p1 est le namespace par défaut (sans préfixe)
  • imsmd_v1p1 est le namespace pour les métadonnées.

Extrait du fichier ims_cp_rootv1p1.xsd

 
<xsd:schema 
	xmlns
 = "http://www.imsglobal.org/xsd/imscp_v1p1"
	targetNamespace = "http://www.imsglobal.org/xsd/imscp_v1p1"
	xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
	xmlns:xsd = "http://www.w3.org/2001/XMLSchema"
	version = "IMS CP 1.1.4"
	elementFormDefault = "qualified">
	
 

3.3 Définition d’éléments

<xs:element>

Exemple d’un simple élément sans enfant et sans attributs:

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

Définition d’éléments enfants

  • On peut les définir de deux façons:
    • soit avec un élément enfant complexType
    • soit avec un attribut "type" qui se réfère à une définition complexType

<xs:complexType> (1)

<xs:element
 name="recipe">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="meta"/>
        <xs:element minOccurs="0" ref="recipe_author"/>
        <xs:element ref="recipe_name"/>
        <xs:element ref="ingredients"/>
        <xs:element ref="directions"/>
      </xs:sequence>
    </xs:complexType> 
  </xs:element>

<xs:complexType> (2)

 <xs:element
 name="recipe" type="recipe_contents
" />
 
 <xs:complexType name="recipe_contents
">
      <xs:sequence>
        <xs:element ref="meta"/>
        <xs:element minOccurs="0" ref="recipe_author"/>
        <xs:element ref="recipe_name"/>
        <xs:element ref="meal"/>
        <xs:element ref="ingredients"/>
        <xs:element ref="directions"/>
      </xs:sequence>
  </xs:complexType>

UPPREVIOUS NEXT -- TIE