Document structuré et métadonnées

Introduction au langage XML

Retour sur la séance précédente – correction exercice 2

De : M Martin <martin@parisnanterre.fr> A : Camille Claverie <cclaveri@parisnanterre.fr> ; Cécile Payeur <cpayeur@parisnanterre.fr>

CC : secretariat-infocom@parisnanterre.fr Sujet : Emploi du temps date : 05/02/2021

pièce(s) jointe(s) : emploi-du-temps.xls

Bonjour,

Vous trouverez ci-joint vos emplois du temps pour le second semestre.

Cordialement,

M. Martin

Secrétariat Infocom Bat L - Université Paris Nanterre

Document valide

Document valide et schéma - notions

Un document XML est un document bien formé ! Il respecte les règles syntaxiques strictes de XML… cf. CM 1.

Un document XML – donc bien formé – peut être valide ! Il respecte une grammaire de document, qui s’exprime à travers une DTD ou un schéma.

Une DTD (Document Type Definition) ou un schéma définit une classe de document XML, c’est-à-dire la liste des éléments et attributs autorisés, ainsi que le contexte dans lequel ils peuvent être appelés.

Il existe plusieurs syntaxes :

  • DTD (héritage de SGML)
  • XML Schema (W3C)
  • RelaxNG (norme ISO)

Document Type Definition

Document Type Definition - notions

La DTD est un héritage de SGML, mais cette technologie est aujourd’hui obsolète :

  • seule syntaxe disponible au lancement de XML en 1999

  • ne repose pas sur la syntaxe XML

  • ne supporte pas les espaces de nom (pas extensible)

  • pas de typage des données

  • expressivité limitée

exemple

      
  
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE person[
    <!ELEMENT person (surname, forename*, birthDate, birthPlace) >
    <!ELEMENT surname (#PCDATA) >
    <!ELEMENT forename (#PCDATA) >
    <!ELEMENT birthDate (#PCDATA) >
    <!ATTLIST birthDate when CDATA #REQUIRED >
    <!ELEMENT birthPlace (#PCDATA) >
    ]>
    
       Turing
       Alan
       Mathison
       23 juin 1912
       Londre
    

  

Les Schémas

Les schémas – notions

Another great strength about XML Schemas is that they are written in XML:

  • You don't have to learn a new language
  • You can use your XML editor to edit your Schema files
  • You can use your XML parser to parse your Schema files
  • You can manipulate your Schemas with the XML DOM
  • You can transform your Schemas with XSLT
  • One of the greatest strengths of XML Schemas is the support for data types:
  • It is easier to describe document content
  • It is easier to define restrictions on data
  • It is easier to validate the correctness of data
  • It is easier to convert data between different data types

Les schémas – notions

Définissent les contraintes que doit respecter une certaine classe de documents.

  • rédigés en XML
  • introduction des types XML
  • support des espaces de noms
  • plus expressifs que les DTD
  • documentation

Le but d'un schéma est de définir une classe de documents XML. Il permet de décrire les autorisations d'imbrication et l'ordre d'apparition des éléments et de leurs attributs, tout comme une DTD. Mais il permet aussi d'aller au-delà.

Espaces de nom : réutilisation de langage spécialisé et déjà existant.

Contrainte plus fine : les indicateurs d'occurrences des éléments peuvent être tout nombre non négatif.

Structure de base

Un document XML schema est un fichier xml :

  • prologue XML
  • élément racine <xs:schema/>
  • espace de nom préfixé “xs”
  
    <?xml version="1.0" encoding="UTF-8"?>
    
    
      
    

  

Déclarations des éléments

Les éléments sont déclarés avec la balise <xs:element/>.

Deux attributs de base :

  • @name (obligatoire) pour indiquer le nom de la balise ;
  • @type pour spécifier le type de données.
  
    <?xml version="1.0" encoding="UTF-8"?>
    
     
     
    

  

Déclarations des attributs

Les attributs sont déclarés avec la balise <xs:attribute/>.

Deux attributs de base :

  • @name (obligatoire) pour indiquer le nom de la balise ;
  • @type pour spécifier le type de données.
  
    <?xml version="1.0" encoding="UTF-8"?>
    
     
     
    

  

Les types

Un schéma fournit un type à chaque élément et attribut qu’il déclare.

Harold, Elliotte Rusty et Means, W. Scott. « XML en concentré : manuel de référence »

Deux types sont supportés pour les éléments par XML schema :

  • les types simples
  • les types complexes

Les types simples

Un élément de type simple contient uniquement du texte.

Un élément de type simple ne peut pas posséder d’attributs ou contenir d’autres éléments.

les attributs sont toujours de type simple.

les principaux types simples prédéfinis sont : xs:string, xs:boolean, xs:date, xs:dateTime, xs:integer, xs:anyURI, etc. Liste des types https://www.w3.org/TR/xmlschema-0/#CreatDt

Il est possible de dériver des types simples existants pour en créer d’autres (listes, unions, facettes).

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

  

Les types simple - listes

Une liste définit un type simple (préexistant ou dérivé) comme une liste de valeur d’un type de données.

N. B. : xs:NMTOKENS, xs:ENTITIES et xs:IDREFS sont déjà des type de liste.


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


Les types simples – unions

L’élément xs:union est utilisé si on souhaite que le contenu d’un élément puisse être issu d’une collection de type de données.


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

Les types simples – facettes

Les facettes, ou restrictions, permettent de spécifier des valeurs de manière plus précise. On utilise alors l’élément xs:restriction et l’attribut base, avec lequel on précise le type simple que l’on souhaite restreindre.

Avec les facettes on peut par exemple contraindre la longueur d’une chaîne de caractère, spécifier une liste de valeurs possibles, ou encore imposer un pattern avec des expressions régulières.


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


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



  
    
      
    
  


              

            

Les types simples – facettes 2

Pour établir une liste de valeurs possibles, on utilisera l’élément xs:enumeration. Dans l’exemple ci-contre, l’élément elem1 dispose d’un attribut att qui peut prendre comme valeur, exclusivement, valeur1, valeur2 ou valeur3.

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

 
   
     
   
 
 
   
     
       
       
       
     
   
 

              
              
            

Les types simples – facettes 3

Pour établir un motif, ou pattern, à l’aide d’une expression régulière on utilisera l’élément xs:pattern. Pour voir quelles facettes sont applicables à chaque type simple voir Simple Types & their Facets.

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

 
   
     
       
       
     
   
 

              

            

Les types complexes

Les types complexes permettent d’introduire des contraintes d'occurrence, des séquences d’éléments, des choix d’éléments, des contenus complexes, etc.

Les types complexes sont définis avec l’élément xs:complexType.

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


 
   
     
   
 

              

            

Les types complexes – séquences

Les éléments apparaissent dans l’ordre définit par xs:sequence.

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


  
  
    
      
      
    
  


              

            

Les types complexes – choix d’éléments

Un seul élément parmis plusieurs possibilité : xs:choice.

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


  
    
    
      
        
        
      
      
    
  


              

            

Les types complexes – xs:all

Avec xs:all tous les éléments enfants peuvent être appelés 0 fois (si on utilise l’attribut minOccurs=’0’) ou 1 fois, dans n’importe quel ordre.

À la différence des éléments xs:sequence et xs:choice qui peuvent être imbriqués, xs:all doit être un enfant directe de xs:complexType.

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


  
  
    
      
      
    
  



              
            

Les types complexes – occurrences

Il est possible d’établir des contraintes d’occurrence.

éléments, avec l’utilisation des attributs :

  • minOccurs (nombre minimum)
  • maxOccurs (nombre maximum)
  • la valeur ‘unbounded’ indique un nombre indéterminé.

attributs

  • use (utilisation optionnelle ou requise)
    • ‘optional’ | ‘required’
  • default (valeur par défaut)
  • fixed (valeur fixe)
              
<?xml version="1.0" encoding="UTF-8"?>



 
   
     
     
   
   
 

  

              
            

Les types complexes – contenu mixte

L’attribut @mixed de valeur ‘true’ associé à l’élément xs:complexType indique que l’élément peut contenir des données textuelles et des éléments et/ou des attributs.

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

 
   
     
       
       
     
   
 


              
            

Les types complexes – contenu mixte 2

Dans l’exemple ci-contre, elem1 peut contenir du texte et autant de fois qu’on le souhaite les éléments elem2 et elem3, dans n’importe quel ordre.

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

 
   
     
       
       
     
   
 


              
            

Les types (très) complexes

Dans l’exemple ci-contre, elem1 est un élément de type complexe qui peut contenir une chaîne de caractères pouvant contenir au maximum 10 caractères et un attribut att. Sans la définition d’un type simple simpleType et l’utilisation des éléments simpleContent et extension pour étendre ce type et autoriser l’utilisation d’un attribut att, il n’est pas possible de contrôler le contenu textuel d’un élément de type complexe.

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

 
 
   
     
       
     
   
 


 
   
 



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

 
   
     
       
     
   
 
 
   
     
       
     
   
 


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

 
 
   
     
       
     
   
 
 
   
     
       
     
   
 


              
            

Bonnes pratiques

Pour faciliter la maintenance du code et le rendre plus lisible, en évitant de multiplier les déclarations similaires (doublons) et les imbrications, il est possible de déclarer des éléments, des attributs, des types complexes et des types simples à un haut niveau.

Cela permet de les définir une seule fois et les appeler lorsque c’est nécessaire.

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

 
   
     
   
 
 
 
   
     
     
   
 


              
            

Les groupes d’attributs

De la même manière, lorsque des attributs peuvent être utilisés avec plusieurs éléments, il est intéressant de déclarer des groupes d’attributs avec l’élément <xs:attributeGroup />.

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

  
    
      
    
  
  
    
    
  


              
            

Validation

Déclarer un schéma dans un fichier XML

              
<?xml-model href="schema.xsd" type="application/xml" schematypens="http://www.w3.org/2001/XMLSchema"?>

              
            

On place une instruction de traitement <?xml-model ?> dans le prologue du document XML :

  • l’attribut href : lien vers le schéma
  • l’attribut type : type de fichier
  • l’attribut schematypens : espace de nom du schéma

Valider un fichier XML

Avec un éditeur de texte qui prend (vraiment) en charge XML :

En ligne :

En ligne de commande.