Schéma XML - XML schema

Un schéma XML est une description d'un type de document XML , généralement exprimée en termes de contraintes sur la structure et le contenu des documents de ce type, au-delà des contraintes syntaxiques de base imposées par XML lui-même. Ces contraintes sont généralement exprimées en utilisant une combinaison de règles grammaticales régissant l'ordre des éléments, des prédicats booléens que le contenu doit satisfaire, des types de données régissant le contenu des éléments et des attributs, et des règles plus spécialisées telles que les contraintes d' unicité et d' intégrité référentielle .

Il existe des langages développés spécifiquement pour exprimer des schémas XML. Le langage de définition de type de document (DTD), qui est natif de la spécification XML, est un langage de schéma dont les capacités sont relativement limitées, mais qui a également d'autres utilisations en XML en dehors de l'expression de schémas. Deux langages de schéma XML plus expressifs largement utilisés sont XML Schema (avec un S majuscule ) et RELAX NG .

Le mécanisme d'association d'un document XML à un schéma varie en fonction du langage du schéma. L'association peut être réalisée via un balisage dans le document XML lui-même, ou via des moyens externes.

Validation

Le processus de vérification pour voir si un document XML est conforme à un schéma est appelé validation , qui est distinct du concept de base de XML de la bonne formation syntaxique . Tous les documents XML doivent être bien formés, mais il n'est pas nécessaire qu'un document soit valide à moins que l'analyseur XML ne «valide», auquel cas la conformité du document avec son schéma associé est également vérifiée. Les analyseurs de validation DTD sont les plus courants, mais certains prennent également en charge XML Schema ou RELAX NG.


La validation d'un document d'instance par rapport à un schéma peut être considérée comme une opération conceptuellement distincte de l'analyse XML. Dans la pratique, cependant, de nombreux validateurs de schéma sont intégrés à un analyseur XML.

Langues

Il existe plusieurs langues différentes disponibles pour spécifier un schéma XML. Chaque langue a ses forces et ses faiblesses.

L'objectif principal d'un langage de schéma est de spécifier ce que peut être la structure d'un document XML. Cela signifie quels éléments peuvent résider dans quels autres éléments, quels attributs sont et ne sont pas autorisés à avoir sur un élément particulier, et ainsi de suite. Un schéma est analogue à une grammaire pour une langue; un schéma définit ce que peut être le vocabulaire de la langue et ce qu'est une «phrase» valide.

Il existe des langages de schéma XML historiques et actuels:

Langue Abrév. Versions Autorité
Langage de contrainte en XML CLiX 2005 Indépendant
Fonction de description du contenu du document pour XML, un cadre RDF DCD v1.0 (1998) W3C (Remarque)
Langage de balisage de définition de document DDML v0 (1999) W3C (Remarque)
Description de la structure du document DSD 2002, 2005 BRICS (défunte)
Définition du type de document DTD 1986 (SGML) ISO
2008 (XML) ISO / CEI
Langage de routage de l'espace de noms LNR 2003 Indépendant
Langage de distribution de validation basé sur l'espace de noms NVDL 2006 ISO / CEI
Mécanisme d'assemblage de contenu CAME 2007 OASIS
REgular LAnguage pour XML Next Generation RELAX NG, RelaxNG 2001, syntaxe compacte (2002) OASIS
v1 (2003), v1 Syntaxe compacte (2006), v2 (2008) ISO / CEI
Schéma pour XML orienté objet SOX ? ?
Schematron N / A 2006, 2010, 2016, 2020 ISO / CEI
Données XML réduites XDR ? ?
Règles de codage XML ASN.1 XER ? ?
Schéma XML WXS, XSD 1,0 (2004) et 1,1 (2012) W3C

Les principaux (voir également les langages approuvés par l' ISO 19757 ) sont décrits ci-dessous.

Bien qu'il existe un certain nombre de langages de schéma disponibles, les trois principaux langages sont les définitions de type de document , le schéma XML W3C et RELAX NG . Chaque langue a ses propres avantages et inconvénients.

Définitions de type de document

Support d'outils

Les DTD sont peut-être le langage de schéma le plus largement pris en charge pour XML. Étant donné que les DTD sont l'un des premiers langages de schéma pour XML, définis avant même que XML ne prenne en charge les espaces de noms, ils sont largement pris en charge. Les DTD internes sont souvent pris en charge dans les processeurs XML; les DTD externes sont moins souvent prises en charge, mais seulement légèrement. La plupart des grands analyseurs XML, ceux qui prennent en charge plusieurs technologies XML, prendront également en charge les DTD.

Schéma XML du W3C

Avantages par rapport aux DTD

Les fonctionnalités disponibles dans XSD qui ne figurent pas dans les DTD incluent:

  • Les noms des éléments et des attributs sont sensibles aux espaces de noms
  • Des contraintes ("types simples") peuvent être définies pour le contenu textuel des éléments et des attributs, par exemple pour spécifier qu'ils sont numériques ou contiennent des dates. Un large répertoire de types simples est fourni en standard, et des types supplémentaires définis par l'utilisateur peuvent en être dérivés, par exemple en spécifiant des plages de valeurs, des expressions régulières ou en énumérant les valeurs autorisées.
  • Les fonctions de définition des contraintes d'unicité et d'intégrité référentielle sont plus puissantes: contrairement aux contraintes ID et IDREF dans les DTD, elles peuvent être étendues à n'importe quelle partie d'un document, peuvent être de n'importe quel type de données, peuvent s'appliquer aussi bien aux éléments qu'aux contenus d'attributs, et peut être en plusieurs parties (par exemple, la combinaison du prénom et du nom doit être unique).
  • De nombreuses exigences qui sont traditionnellement gérées à l'aide d'entités paramètres dans les DTD ont une prise en charge explicite dans XSD: les exemples incluent des groupes de substitution, qui permettent à un seul nom (tel que «bloc» ou «en ligne») de faire référence à toute une classe d'éléments; les types complexes, qui permettent au même modèle de contenu d'être partagé (ou adapté par restriction ou extension) par plusieurs éléments; et les groupes de modèles et les groupes d'attributs, qui permettent aux parties communes des modèles de composants d'être définies en un seul endroit et réutilisées.
  • XSD 1.1 ajoute la possibilité de définir des assertions arbitraires (à l'aide d'expressions XPath) en tant que contraintes sur le contenu des éléments.

Les schémas XSD sont traditionnellement écrits sous forme de documents XML, de sorte que des outils d'édition et de transformation familiers peuvent être utilisés.

Outre la validation, XSD permet aux instances XML d'être annotées avec des informations de type (le jeu d'informations post-schéma-validation (PSVI) ) qui est conçu pour faciliter la manipulation de l'instance XML dans les programmes d'application. Cela peut être en mappant les types XSD-définis à des types dans un langage de programmation tel que Java ("liaison de données") ou en enrichissant le système de types de langages de traitement XML tels que XSLT et XQuery (connu sous le nom de "connaissance du schéma").

Points communs avec RELAX NG

RELAX NG et le schéma XML du W3C permettent des mécanismes similaires de spécificité. Les deux permettent un certain degré de modularité dans leurs langages, y compris, par exemple, la division du schéma en plusieurs fichiers. Et les deux sont, ou peuvent être, définis dans un langage XML.

Avantages par rapport à RELAX NG

RELAX NG n'a pas d'analogue au PSVI . Contrairement au schéma XML du W3C, RELAX NG a été conçu pour que la validation et l'augmentation (ajout d'informations de type et de valeurs par défaut) soient séparées.

Le schéma XML du W3C a un mécanisme formel pour attacher un schéma à un document XML, tandis que RELAX NG évite intentionnellement de tels mécanismes pour des raisons de sécurité et d'interopérabilité.

RELAX NG n'a pas la capacité d'appliquer des données d'attributs par défaut à la liste d'attributs d'un élément (c'est-à-dire en modifiant l'ensemble d'informations XML), contrairement au schéma XML du W3C. Encore une fois, cette conception est intentionnelle et consiste à séparer la validation et l'augmentation.

Le schéma XML du W3C a un riche système intégré de «type simple» (xs: number, xs: date, etc., plus dérivation de types personnalisés), tandis que RELAX NG en a un extrêmement simpliste car il est destiné à utiliser des bibliothèques de types développées indépendamment de RELAX NG, plutôt que de cultiver le sien. Cela est considéré par certains comme un inconvénient. En pratique, il est courant pour un schéma RELAX NG d'utiliser les "types simples" et les "restrictions" prédéfinis (modèle, maxLength, etc.) du schéma XML W3C.

Dans le schéma XML du W3C, un nombre ou une plage spécifique de répétitions de motifs peut être exprimé alors qu'il n'est pratiquement pas possible de spécifier du tout dans RELAX NG (<oneOrMore> ou <zeroOrMore>).

Désavantages

Le schéma XML du W3C est complexe et difficile à apprendre, bien que cela soit en partie dû au fait qu'il essaie de faire plus que la simple validation (voir PSVI ).

Bien qu'écrire en XML soit un avantage, c'est aussi un inconvénient à certains égards. Le langage de schéma XML du W3C, en particulier, peut être assez verbeux, tandis qu'une DTD peut être laconique et relativement facilement modifiable.

De même, le mécanisme formel de WXS pour associer un document à un schéma peut poser un problème de sécurité potentiel. Pour les validateurs WXS qui suivront un URI vers un emplacement en ligne arbitraire, il est possible de lire quelque chose de malveillant de l'autre côté du flux.

Le schéma XML du W3C n'implémente pas la plupart de la capacité DTD à fournir des éléments de données à un document.

Bien que la capacité du schéma XML du W3C à ajouter des attributs par défaut aux éléments soit un avantage, c'est également un inconvénient à certains égards. Cela signifie qu'un fichier XML peut ne pas être utilisable en l'absence de son schéma, même si le document validerait par rapport à ce schéma. En effet, tous les utilisateurs d'un tel document XML doivent également implémenter la spécification du schéma XML du W3C, excluant ainsi les analyseurs XML minimalistes ou plus anciens. Cela peut également ralentir le traitement du document, car le processeur doit potentiellement télécharger et traiter un deuxième fichier XML (le schéma); cependant, un schéma serait normalement alors mis en cache, de sorte que le coût ne survient qu'à la première utilisation.

Support d'outils

La prise en charge de WXS existe dans un certain nombre de grands packages d'analyse XML. Xerces et le .NET Framework de la classe de base Bibliothèque à la fois fournir un soutien pour la validation WXS.

RELAX NG

RELAX NG offre la plupart des avantages du schéma XML du W3C par rapport aux DTD.

Avantages par rapport au schéma XML W3C

Bien que le langage de RELAX NG puisse être écrit en XML, il a également une forme équivalente qui ressemble beaucoup plus à une DTD, mais avec une plus grande puissance de spécification. Cette forme est connue sous le nom de syntaxe compacte. Les outils peuvent facilement convertir entre ces formulaires sans perte de fonctionnalités ni même de commentaires. Même les éléments arbitraires spécifiés entre les éléments XML RELAX NG peuvent être convertis dans la forme compacte.

RELAX NG fournit une prise en charge très forte pour le contenu non ordonné. Autrement dit, il permet au schéma d'indiquer qu'une séquence de modèles peut apparaître dans n'importe quel ordre.

RELAX NG permet également des modèles de contenu non déterministes. Cela signifie que RELAX NG permet la spécification d'une séquence comme la suivante:

<zeroOrMore>
  <ref name="odd" />
  <ref name="even" />
</zeroOrMore>
<optional>
  <ref name="odd" />
</optional>

Lorsque le validateur rencontre quelque chose qui correspond au modèle "impair", on ne sait pas s'il s'agit de la dernière référence "impaire" facultative ou simplement d'une référence dans la séquence zeroOrMore sans regarder les données en avant. RELAX NG permet ce type de spécification. Le schéma XML du W3C exige que toutes ses séquences soient pleinement déterministes, de sorte que des mécanismes comme celui ci-dessus doivent être soit spécifiés d'une manière différente, soit complètement omis.

RELAX NG permet de traiter les attributs comme des éléments dans les modèles de contenu. En particulier, cela signifie que l'on peut fournir ce qui suit:

<element name="some_element">
  <choice>
    <attribute name="has_name">
      <value>false</value>
    </attribute>
    <group>
      <attribute name="has_name">
        <value>true</value>
      </attribute>
      <element name="name"><text /></element>
    </group>
  </choice>
</element>

Ce bloc indique que l'élément "some_element" doit avoir un attribut nommé "has_name". Cet attribut ne peut prendre que vrai ou faux comme valeurs, et s'il est vrai, le premier élément enfant de l'élément doit être "nom", qui stocke le texte. Si "nom" n'avait pas besoin d'être le premier élément, alors le choix pourrait être enveloppé dans un élément "interleave" avec d'autres éléments. L'ordre de spécification des attributs dans RELAX NG n'a aucune signification, ce bloc n'a donc pas besoin d'être le premier bloc dans la définition d'élément.

Le schéma XML du W3C ne peut pas spécifier une telle dépendance entre le contenu d'un attribut et les éléments enfants.

La spécification de RELAX NG ne répertorie que deux types intégrés (chaîne et jeton), mais elle permet la définition de beaucoup plus. En théorie, l'absence de liste spécifique permet à un processeur de prendre en charge des types de données très spécifiques au domaine du problème.

La plupart des schémas RELAX NG peuvent être convertis de manière algorithmique en schémas XML W3C et même en DTD (sauf lors de l'utilisation de fonctionnalités RELAX NG non prises en charge par ces langages, comme ci-dessus). L'inverse n'est pas vrai. En tant que tel, RELAX NG peut être utilisé comme une version normative du schéma, et l'utilisateur peut le convertir en d'autres formes pour des outils qui ne prennent pas en charge RELAX NG.

Désavantages

La plupart des inconvénients de RELAX NG sont traités dans la section sur les avantages du schéma XML W3C par rapport à RELAX NG.

Bien que la capacité de RELAX NG à prendre en charge les types de données définis par l'utilisateur soit utile, elle présente l'inconvénient de n'avoir que deux types de données sur lesquels l'utilisateur peut s'appuyer. Ce qui, en théorie, signifie que l'utilisation d'un schéma RELAX NG sur plusieurs validateurs nécessite soit de fournir ces types de données définis par l'utilisateur à ce validateur, soit d'utiliser uniquement les deux types de base. Dans la pratique, cependant, la plupart des processeurs RELAX NG prennent en charge l'ensemble de types de données du schéma XML du W3C.

Schematron

Schematron est un langage de schéma assez inhabituel. Contrairement aux trois principaux, il définit la syntaxe d'un fichier XML comme une liste de règles basées sur XPath . Si le document passe ces règles, il est valide.

Avantages

En raison de sa nature basée sur des règles, la spécificité de Schematron est très forte. Il peut exiger que le contenu d'un élément soit contrôlé par l'un de ses frères et sœurs. Il peut également demander ou exiger que l'élément racine, quel que soit l'élément qui se trouve être, ait des attributs spécifiques. Il peut même spécifier les relations requises entre plusieurs fichiers XML.

Désavantages

Bien que Schematron soit doué pour les constructions relationnelles, sa capacité à spécifier la structure de base d'un document, c'est-à-dire quels éléments peuvent aller où, se traduit par un schéma très détaillé.

La manière typique de résoudre ce problème consiste à combiner Schematron avec RELAX NG ou W3C XML Schema. Il existe plusieurs processeurs de schéma disponibles pour les deux langues qui prennent en charge ce formulaire combiné. Cela permet aux règles Schematron de spécifier des contraintes supplémentaires à la structure définie par W3C XML Schema ou RELAX NG.

Support d'outils

L'implémentation de référence de Schematron est en fait une transformation XSLT qui transforme le document Schematron en un XSLT qui valide le fichier XML. En tant que tel, l'ensemble d'outils potentiels de Schematron est n'importe quel processeur XSLT, bien que libxml2 fournisse une implémentation qui ne nécessite pas XSLT. Le validateur de schémas multiples de Sun Microsystems pour Java possède un module complémentaire qui lui permet de valider les schémas RELAX NG qui ont des règles Schematron intégrées.

Langage de routage d'espace de noms (NRL)

Ce n'est pas techniquement un langage de schéma. Son seul objectif est de diriger des parties de documents vers des schémas individuels en fonction de l'espace de noms des éléments rencontrés. Un NRL est simplement une liste d' espaces de noms XML et un chemin vers un schéma auquel chacun correspond. Cela permet à chaque schéma de se préoccuper uniquement de sa propre définition de langage, et le fichier NRL achemine le validateur de schéma vers le fichier de schéma approprié en fonction de l'espace de noms de cet élément.

Ce format XML est indépendant du langage de schéma et fonctionne pour à peu près n'importe quel langage de schéma.

Terminologie

Capitalisation dans le mot du schéma : il existe une certaine confusion quant à l'utilisation de l'orthographe majuscule «Schéma» et à l'utilisation de l'orthographe minuscule. La forme minuscule est un terme générique et peut faire référence à tout type de schéma, y ​​compris DTD, XML Schema (aka XSD), RELAX NG, ou autres, et doit toujours être écrite en minuscules sauf lorsqu'elle apparaît au début d'une phrase. La forme «Schéma» (en majuscules) couramment utilisée dans la communauté XML fait toujours référence au schéma XML du W3C .

Choix de création de schéma

L'objectif de la définition de schéma est la structure et une certaine sémantique des documents. Cependant, la conception de schémas, tout comme la conception de bases de données, de programmes informatiques et d'autres constructions formelles, implique également de nombreuses considérations de style, de convention et de lisibilité. Des discussions approfondies sur les problèmes de conception de schéma peuvent être trouvées dans (par exemple) Maler (1995) et DeRose (1997).

Cohérence
Une considération évidente est que les balises et les noms d'attributs doivent utiliser des conventions cohérentes. Par exemple, il serait inhabituel de créer un schéma dans lequel certains noms d'éléments sont camelCase mais d'autres utilisent des traits de soulignement pour séparer les parties des noms, ou d'autres conventions.
Noms clairs et mnémotechniques
Comme dans d'autres langages formels, de bons choix de noms peuvent aider à la compréhension, même si les noms en soi n'ont aucune signification formelle. Nommer la balise appropriée "chapitre" plutôt que "tag37" est une aide pour le lecteur. En même temps, cela pose des problèmes de choix du langage naturel. Un schéma à utiliser pour les documents en gaélique irlandais utilisera probablement le même langage pour les noms d'éléments et d'attributs, puisque ce sera le langage commun aux éditeurs et aux lecteurs.
Choix de la balise et de l' attribut
Certaines informations peuvent «s'intégrer» facilement dans un élément ou un attribut. Étant donné que les attributs ne peuvent pas contenir d'éléments en XML, cette question se pose uniquement pour les composants qui n'ont pas de sous-structure supplémentaire dont XML doit être conscient (les attributs prennent en charge plusieurs jetons, tels que plusieurs valeurs IDREF, qui peuvent être considérées comme une légère exception). Les attributs représentent généralement des informations associées à l'intégralité de l'élément sur lequel ils se produisent, tandis que les sous-éléments introduisent une nouvelle portée qui leur est propre.
Contenu textuel
Certains schémas XML, en particulier ceux qui représentent divers types de documents , garantissent que tout le «contenu textuel» (en gros, toute partie que l'on parlerait en lisant le document à haute voix) se présente sous forme de texte, et jamais d'attributs. Cependant, il existe de nombreux cas extrêmes où cela ne tient pas: Premièrement, il existe des documents XML qui n'impliquent pas du tout de «langage naturel», ou seulement de manière minimale, comme pour la télémétrie, la création de graphiques vectoriels ou de formules mathématiques, etc. . Deuxièmement, des informations telles que les mises en scène dans les pièces de théâtre, les numéros de versets dans les œuvres classiques et bibliques, et la correction ou la normalisation de l'orthographe dans les œuvres transcrites, posent tous des problèmes d'interprétation que les concepteurs de schémas pour ces genres doivent prendre en compte.
Réutilisation du schéma
Un nouveau schéma XML peut être développé à partir de zéro, ou peut réutiliser certains fragments d'autres schémas XML . Tous les langages de schéma offrent certains outils (par exemple, le contrôle d' inclusion et de modularisation sur les espaces de noms) et recommandent de les réutiliser lorsque cela est possible. Diverses parties des schémas étendus et sophistiqués de l' Initiative de codage de texte sont également réutilisées dans une extraordinaire variété d'autres schémas.
Sémantique vs syntatique
À l'exception d'un langage lié au RDF, aucun langage de schéma n'exprime formellement sémantique, seulement la structure et les types de données. En dépit d'être l'idéal, l'inclusion des hypothèses RDF est très pauvre et n'est pas une recommandation dans les cadres de développement de schéma .

Voir également

Langues:

Les références

Liens externes