Cliquez ici.
Accueil
 chercher             Plan du site             Info (English version) 
L'histoire de XML s'écrit en ce moment même. XMLfr vous aide à la suivre et à en dégager les tendances.Les listes de discussions XMLfr sont à votre disposition pour réagir sur nos articles ou simplement poser une question.Si vous ètes passionnée(e) par XML, pourquoi ne pas en faire votre métier ?XMLfr n'est heureusement pas le seul site où l'on parle de XML. Découvrez les autres grâce à XMLfr et à l'ODP.Les partenaires grâce auxquels XMLfr peut se développer.Pour tout savoir sur XMLfr.XMLfr sans fil, c'est possible !Pour ceux qui veulent vraiment en savoir plus sur XML.L'index du site.
 Si vous vous posez une question, vous n'êtes peut-être pas le premier...Les traductions en français des bibles XML.Ces articles sont des références dans leur domaine.Tout ce qu'il faut savoir pour démarrer sur un sujet XML...

 
Cliquez ici.

Attributs xml et schémas W3C XML Schema

Comment déclarer les attributs xml:* dans un schéma W3C XML Schema?

Eric van der Vlist, Dyomedea (vdv@dyomedea.com).
mercredi 1er mars 2006

Table des matières

Question

Particularités des attributs xml:*

Déclaration des attributs

Autoriser tous les attributs xml:*, valides ou non

Autoriser tous les attributs xml:* s'ils sont définis et valides

Autoriser certains attributs xml:* s'ils sont définis et valides

Autres articles :

Question

J'ai une structure XML avec un élément contenant un attribut du genre xml:lang="fr". Comment faire pour le déclarer dans mon schéma W3C XML Schema?

Particularités des attributs xml:*

Les recommandations XML 1.0 et 1.1 réservent le préfixe « xml » dans tous les noms (éléments, attributs, entités, ...) à des utilisations définies par le W3C.

Le préfixe « xml: » et les attributs préfixés par « xml: » sont donc concernés par cette règle.

Le préfixe « xml: » a la particularité d'être le seul préfixe d'espace de noms affecté à un espace de noms sans devoir être déclaré. L'URI de l'espace de noms auquel il est affecté est « http://www.w3.org/XML/1998/namespace ».

Le W3C publie et maintient un schéma décrivant cet espace de noms (qui ne contient actuellement que des attributs) à l'adresse « http://www.w3.org/2001/xml.xsd ».

Déclaration des attributs

Les techniques qui sont appliquées pour faire référence à ces attributs sont applicables à tout espace de noms et peuvent être utilisées, par exemple, pour faire référence aux attributs XLink.

Suivant le niveau de contrôle que l'on souhaite imposer à ces attributs, on pourra utiliser une des trois méthodes suivantes:

Autoriser tous les attributs xml:*, valides ou non

Si l'on souhaite autoriser tout attribut xml:*, qu'il ait été défini par le W3C ou non et sans faire aucun contrôle sur son contenu, on utilisera la particule W3C XML Schema « xs:anyAttribute » en mode « lax » sans importer le schéma de l'espace de noms « http://www.w3.org/XML/1998/namespace », par exemple :

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFor
mDefault="qualified"
  targetNamespace="http://ns.xmlfr.org/example/" xmlns:example="h
ttp://ns.xmlfr.org/example/">
  <xs:element name="document">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="example:titre"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="titre">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:token">
          <xs:anyAttribute namespace="http://www.w3.org/XML/1998/
namespace" processContents="lax"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
</xs:schema>

Ce schéma valide des documents tels que :

<?xml version="1.0" encoding="UTF-8"?>
<document xmlns="http://ns.xmlfr.org/example/">
    <titre xml:lang="fr">Titre</titre>
</document>

ou :

<?xml version="1.0" encoding="UTF-8"?>
<document xmlns="http://ns.xmlfr.org/example/">
    <titre xml:lang="ceci ne devrait pas être permis">Titre</titr
e>
</document>

ou :

<?xml version="1.0" encoding="UTF-8"?>
<document xmlns="http://ns.xmlfr.org/example/">
    <titre xml:id="titre">Titre</titre>
</document>

ou encore :

<?xml version="1.0" encoding="UTF-8"?>
<document xmlns="http://ns.xmlfr.org/example/">
    <titre xml:interdit="titre">Titre</titre>
</document>

Autoriser tous les attributs xml:* s'ils sont définis et valides

Si l'on souhaite autoriser tout attribut xml:* conformément à sa définition par le W3C, on utilisera la particule W3C XML Schema « xs:anyAttribute » en mode « strict » après avoir importé le schéma de l'espace de noms « http://www.w3.org/XML/1998/namespace », par exemple :

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFor
mDefault="qualified"
  targetNamespace="http://ns.xmlfr.org/example/" xmlns:example="h
ttp://ns.xmlfr.org/example/">
  <xs:import namespace="http://www.w3.org/XML/1998/namespace"
    schemaLocation="http://www.w3.org/2001/xml.xsd"/>
  <xs:element name="document">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="example:titre"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="titre">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:token">
          <xs:anyAttribute namespace="http://www.w3.org/XML/1998/
namespace" processContents="strict"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
</xs:schema>

Ce schéma valide des documents tels que :

<?xml version="1.0" encoding="UTF-8"?>
<document xmlns="http://ns.xmlfr.org/example/">
    <titre xml:lang="fr">Titre</titre>
</document>

ou :

<?xml version="1.0" encoding="UTF-8"?>
<document xmlns="http://ns.xmlfr.org/example/">
    <titre xml:id="titre">Titre</titre>
</document>

Mais pas :

<?xml version="1.0" encoding="UTF-8"?>
<document xmlns="http://ns.xmlfr.org/example/">
    <titre xml:lang="ceci ne devrait pas être permis">Titre</titr
e>
</document>

qui correspond à une valeur interdite pour « xml:lang », ni :

<?xml version="1.0" encoding="UTF-8"?>
<document xmlns="http://ns.xmlfr.org/example/">
    <titre xml:interdit="titre">Titre</titre>
</document>

qui correspond à un attribut non défini par le W3C.

Autoriser certains attributs xml:* s'ils sont définis et valides

Si l'on souhaite autoriser uniquement certains xml:* (par exemple xml:lang) conformément à leur définition par le W3C, on fera référence à ces attributs après avoir importé le schéma de l'espace de noms « http://www.w3.org/XML/1998/namespace », par exemple :

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFor
mDefault="qualified"
  targetNamespace="http://ns.xmlfr.org/example/" xmlns:example="h
ttp://ns.xmlfr.org/example/">
  <xs:import namespace="http://www.w3.org/XML/1998/namespace"
    schemaLocation="http://www.w3.org/2001/xml.xsd"/>
  <xs:element name="document">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="example:titre"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="titre">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:token">
          <xs:attribute ref="xml:lang"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
</xs:schema>

Ce schéma valide des documents tels que :

<?xml version="1.0" encoding="UTF-8"?>
<document xmlns="http://ns.xmlfr.org/example/">
    <titre xml:lang="fr">Titre</titre>
</document>

Mais pas :

<?xml version="1.0" encoding="UTF-8"?>
<document xmlns="http://ns.xmlfr.org/example/">
    <titre xml:id="titre">Titre</titre>
</document>

qui correspond à un attribut auquel nous n'avons pas fait référence, ni :

<?xml version="1.0" encoding="UTF-8"?>
<document xmlns="http://ns.xmlfr.org/example/">
    <titre xml:lang="ceci ne devrait pas être permis">Titre</titr
e>
</document>

qui correspond à une valeur interdite pour xml:lang, ni :

<?xml version="1.0" encoding="UTF-8"?>
<document xmlns="http://ns.xmlfr.org/example/">
    <titre xml:interdit="titre">Titre</titre>
</document>

qui correspond à un attribut non défini par le W3C.

Autres articles :

  1. xsi:schemaLocation et noNamespaceSchemaLocation.
  2. Importer un espace de noms avec W3C XML Schema

Copyright 2006, Eric van der Vlist


 

Mots clés.



L'histoire de XML s'écrit en ce moment même. XMLfr vous aide à la suivre et à en dégager les tendances.


Cliquez ici.
Cliquez ici.

Devenez rédacteur <XML>fr et contribuez au développement du xml francophone !
Les documents publiés sur ce site le sont sous licence "Open Content"
Conception graphique
  l.henriot  

Conception, réalisation et hébergement
Questions ou commentaires
  redacteurs@xmlfr.org