Quelle est la différence entre XML et XSD?

111

Quelle est la différence entre Extensible Markup Language (XML) et XML Schema (XSD)?

Gandalf StormCrow
la source

Réponses:

145

En fait, le XSD est XML lui-même. Son but est de valider la structure d'un autre document XML. Le XSD n'est obligatoire pour aucun XML, mais il garantit que le XML pourrait être utilisé à des fins particulières. Le XML ne contient que des données dans un format et une structure appropriés.

anthares
la source
Juste pour être clair - si un tiers m'a envoyé un document .XSD avec les goûts suivants: <xs: element name = "QuoteRequestID" type = "xs: unsignedLong" minOccurs = "0" /> inclus - c'est juste une description des champs n'est-ce pas. Est-ce une chose raisonnable de leur demander un exemple de demande réel qui serait du XML brut avec <QuoteResultID>, etc.
James Wilson
3
Vous pouvez sûrement leur demander. Vous pouvez également utiliser certains des outils en ligne qui peuvent le faire pour vous, comme celui-ci par exemple - xsd2xml . Collez simplement le xsd et il générera un exemple de document xml basé sur celui-ci.
anthares
@anthares, j'ai essayé le lien avec: <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="QuoteRequestID" type="xs:unsignedLong" minOccurs="0" /> </xs:schema> mais j'ai fini par obtenir l'erreur: Error!!! The 'minOccurs' attribute cannot be present.
heretoinfinity le
Pourquoi cela poserait-il un problème?
heretoinfinity le
111


Prenons un exemple

<root>
  <parent>
     <child_one>Y</child_one>
     <child_two>12</child_two>
  </parent>
</root>

et concevez un xsd pour cela:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" 
xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="root">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="parent">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="child_one" type="xs:string" />
              <xs:element name="child_two" type="xs:int" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>


Ce qui n'est pas possible avec XSD: je voudrais l'écrire en premier car la liste est très petite
1) Vous ne pouvez pas valider un nœud / attribut en utilisant la valeur d'un autre nœud / attribut.
2) Ceci est une restriction: un élément défini dans un fichier XSD doit être défini avec un seul type de données. [dans l'exemple ci-dessus, pour <child_two>apparaître dans un autre <parent>nœud, le type de données ne peut pas être défini autrement que int.
3) Vous ne pouvez pas ignorer la validation des éléments et des attributs, c'est-à-dire que si un élément / attribut apparaît en XML, il doit être bien défini dans le XSD correspondant. Bien que l'utilisation de le <xsd:any>permette, mais il a ses propres règles. Respecter ce qui conduit à l'erreur de validation. J'avais essayé une approche similaire, et je n'ai certainement pas réussi, voici les questions / réponses


ce qui est possible avec XSD:
1) Vous pouvez tester la bonne hiérarchie des nœuds XML. [xsd définit quel enfant doit appartenir à quel parent, etc., respectant ce qui sera compté comme une erreur, dans l'exemple ci-dessus, child_two ne peut pas être l'enfant immédiat de root, mais c'est l'enfant de la balise "parent" qui est à son tour un enfant du nœud "racine", il existe une hiérarchie ..]
2) Vous pouvez définir le type de données des valeurs des nœuds. [dans l'exemple ci-dessus child_two ne peut pas avoir d'autres données que nombre]
3) Vous pouvez également définir des types de données personnalisés, [exemple, pour le nœud <month>, les données possibles peuvent être l'un des 12 mois .. vous devez donc définir tous les 12 mois dans un nouveau type de données écrivant tous les noms de 12 mois comme valeurs d'énumération.
4) Vous pouvez mettre la restriction sur l'occurrence des éléments, en utilisant minOccurs et maxOccurs, les valeurs par défaut sont 1 et 1.

.. et beaucoup plus ...

InfantPro'Aravind '
la source
1
@ InfantPro'Aravind 'Qu'entendez-vous par "Vous ne pouvez pas valider un nœud / attribut en utilisant la valeur d'un autre nœud / attribut.". Pourquoi quelqu'un voudrait-il faire ça?
Geek
@Geek stackoverflow.com/questions/4126988/…
InfantPro'Aravind '18
"Vous ne pouvez pas valider un nœud / attribut en utilisant la valeur d'un autre nœud / attribut". Qu'est-ce que cela signifie
GrowinMan
@ GrowinMan, Validation conditionnelle (Pas de relation parent-enfant) Ex: Si c'est votre xml: <root> <A>A</A> <B/> <C/> </root>et si Node l' <A>est <A>B</A>, alors rendez <B>obligatoire, si <A>C</A>alors rendez <C>obligatoire.
InfantPro'Aravind '
L'exigence ci-dessus est impossible à atteindre avec XSD seul
InfantPro'Aravind '
15

XSD:
XSD (XML Schema Definition) spécifie comment décrire formellement les éléments dans un document XML (Extensible Markup Language).
Xml:
XML a été conçu pour décrire les données . Il est indépendant des logiciels et du matériel.
Cela améliore les choses suivantes.
-Partage de données.
-Indépendant de la plateforme.
-Augmentation de la disponibilité des données.

Différences:

  1. XSD est basé et écrit sur XML.

  2. XSD définit les éléments et les structures qui peuvent apparaître dans le document, contrairement à XML.

  3. XSD garantit que les données sont correctement interprétées, contrairement à XML.

  4. Un document XSD est validé en tant que XML, mais l'inverse n'est pas toujours vrai.

  5. XSD est meilleur pour détecter les erreurs que XML.

Un XSD définit les éléments qui peuvent être utilisés dans les documents, relatifs aux données réelles avec lesquelles il doit être encodé.
Par exemple:
une date exprimée en 1/12/2010 peut signifier soit le 12 janvier, soit le 1er décembre. La déclaration d'un type de données de date dans un document XSD garantit qu'il respecte le format dicté par XSD.

Crâne
la source
La première déclaration décrivait tout.
Ojonugwa Jude Ochalifu
6

EXEMPLE XML SIMPLE:

<school>
  <firstname>John</firstname>
  <lastname>Smith</lastname>
</school>

XSD DU XML CI-DESSUS (expliqué):

<xs:element name="school">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="firstname" type="xs:string"/>
      <xs:element name="lastname" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

Ici:

xs: element : définit un élément.

xs: sequence : indique que les éléments enfants n'apparaissent que dans l'ordre mentionné.

xs: complexType : indique qu'il contient d'autres éléments.

xs: simpleType : indique qu'ils ne contiennent pas d'autres éléments.

type: chaîne, décimal, entier, booléen, date, heure,

  • En termes simples , xsd est une autre façon de représenter et de valider des données XML avec le type spécifique.
  • Avec l'aide d'attributs supplémentaires, nous pouvons effectuer plusieurs opérations.

  • Effectuer n'importe quelle tâche sur xsd est plus simple que xml.

shubham1js
la source
Salut! Quel programme dois-je utiliser pour créer un fichier XSD?
Judith
Programme @Judith? pouvez-vous expliquer votre question. comme éditeur ou langue ou outil?
shubham1js
1

Fondamentalement, un fichier XSD définit à quoi ressemblera le fichier XML. C'est un fichier de schéma qui définit la structure du fichier XML. Donc, il spécifie quels sont les champs possibles et quelle taille ils vont être.

Un fichier XML est une instance de XSD car il utilise les règles définies dans le XSD.

SelMez
la source
0

XML a une application beaucoup plus large que f.ex. HTML. Il n'a pas d '"application" intrinsèque ou par défaut. Ainsi, même si vous ne vous souciez pas vraiment du fait que les pages Web sont également régies par ce qui est autorisé, du côté de l'auteur, vous voudrez probablement définir précisément ce qu'un document XML peut et ne peut pas contenir.

C'est comme concevoir une base de données.

Le problème avec les technologies XML est qu'elles sont de nature textuelle. Avec XSD, cela signifie que vous avez un cadre de définition de structure de données qui peut être «branché» à des outils de traitement de texte comme PHP. Ainsi, non seulement vous pouvez manipuler les données elles-mêmes, mais également modifier et documenter très facilement la structure, et même générer automatiquement des frontaux.

Vu sous cet angle, XSD est la "colle" ou "middleware" entre les données (XML) et les outils informatiques.

Hatebit
la source