174 votes

Quel est le moyen correct pour représenter des éléments XML null ?

J'ai vu null les éléments représentés dans plusieurs façons:

L'élément est présent avec xsi:nil="true":

<book>
    <title>Beowulf</title>
    <author xsi:nil="true"/>
</book>

L'élément est présent, mais représenté comme un élément vide (qui je crois est faux puisque le "vide", et null sont sémantiquement différents):

<book>
    <title>Beowulf</title>
    <author/>
</book>

<!-- or: -->
<book>
    <title>Beowulf</title>
    <author></author>
</book>

L'élément n'est pas présent dans le retourné de balisage:

<book>
    <title>Beowulf</title>
</book>

Cet élément a un <null/> élément enfant (à partir de TStamper ci-dessous):

<book>
    <title>Beowulf</title>
    <author><null/></author>
</book>

Est-il correct, ou de manière canonique représenter un null de la valeur? Existe-il d'autres moyens que les exemples ci-dessus?

Le XML pour les exemples ci-dessus est tiré par les cheveux, afin de ne pas lire trop loin en elle. :)

129voto

KitsuneYMG Points 7604

xsi:nil est la bonne façon de représenter une valeur telle que: Lorsque le DOM Niveau 2 appel getElementValue() est émis, la valeur NULL est retournée. xsi:nil est également utilisé pour indiquer un élément sans contenu, même si le fait que les éléments de contenu de type normalement ne permet pas d'éléments vides.

Si une balise vide est utilisé, getElementValue() retourne une chaîne vide ("") Si la balise est omis, alors qu'aucun auteur n'balise est encore présent. Cela peut être sémantiquement différents, plutôt qu'à "néant" (Ex. Réglage de la "Série" à nul peut être que le livre n'appartient à personne de la série, tout en omettant de la série pourrait dire que la série est un inapplicable élément à l'élément en cours.)

De: Le W3C

Schéma XML: Structures introduit un mécanisme pour la signalisation d'un l'élément doit être accepté comme valide· quand il n'a pas de contenu en dépit d'une type de contenu qui ne nécessite pas ou même nécessairement laisser vide de contenu. Un élément peut être ·valide· sans le contenu s'il a l'attribut xsi:nil avec la valeur true. Un élément étiqueté doit être vide, mais peut transporter des attributs si elle est autorisée par le correspondant de type complexe.

Précisions:
Si vous avez un livre de l'élément xml et un des éléments d'enfant est livre:les séries que vous avez plusieurs options quand à la remplir:

  1. Suppression de l'élément entièrement - Ce qui peut être fait lorsque vous souhaitez indiquer que la série ne s'applique pas à ce livre ou ce livre ne fait pas partie d'une série. Dans ce cas xsl transformations (ou d'autres événements basés sur les processeurs) qui ont un modèle qui correspond le livre:la série ne sera jamais appelé. Par exemple, si votre xsl tourne le livre de l'élément dans la ligne de la table (xhtml:tr) vous pouvez obtenir le bon nombre de cellules de tableau (xhtml:td) à l'aide de cette méthode.
  2. En laissant l'élément vide - Ce qui pourrait indiquer que la série est "", ou s'il est inconnu, ou que le livre ne fait pas partie d'une série. Toute transformation xsl (ou d'autres evernt analyseur) qui correspond à la livre:la série sera appelée. La valeur du courant() va être "". Vous obtiendrez le même nombre de xhtml:td étiquettes à l'aide de cette méthode qu'avec la prochaine décrit un.
  3. À l'aide de xsi:nil="true" - Ce qui signifie que le livre:la série de l'élément est NULL, et pas seulement vide. Votre transformation xsl (ou d'un autre événement d'analyseur) qui ont un modèle d'appariement livre:la série sera appelée. La valeur du courant() est vide (pas de chaîne vide). La principale différence entre cette méthode et (2), c'est que le schéma type de livre:la série n'a pas besoin pour permettre à la chaîne vide ("") comme une valeur valide. Cela ne fait pas de sens réel pour une série d'élément, mais pour un élément de langage qui est défini comme un type énuméré dans le schéma, xsi:nil="true" permet à l'élément à ne disposons pas de données. Autre exemple, les éléments de type decimal. Si vous voulez être vide, vous pouvez l'union enuméré chaîne qui n'autorise que les "" et une virgule, ou utiliser une virgule qui accepte la valeur null.

11voto

StaxMan Points 34626

Il n’y a aucune réponse canonique, puisque XML a fondamentalement aucune notion nulle. Mais je suppose que vous voulez le mappage objet/Xml (étant donné que les graphiques d’objets ont des valeurs null) ; donc la réponse pour vous est « quelle que soit l’outil utilise ». Si vous écrivez de manutention, cela signifie que ce que vous préférez. Pour les outils qui utilisent XML Schema, xsi : nill est le chemin à parcourir. Pour la plupart des mappeurs, omettant élément/attribut correspondant est le moyen de le faire.

9voto

Tormod Fjeldskår Points 4023

Cela dépend de comment vous validez votre XML. Si vous utilisez la validation de schéma XML, la façon correcte de représenter valeurs est avec le attribut.

[Source]

4voto

Robert Rossney Points 43767

Vous utilisez xsi:nil lors de votre schéma sémantique indiquer qu'un élément a une valeur par défaut, et que la valeur par défaut doit être utilisée si l'élément n'est pas présent. Je suppose qu'il y a des gens intelligents à qui la phrase précédente n'est pas de toute évidence très mauvaise idée, mais il semble comme neuf sortes de mauvais pour moi. Chaque format XML que j'ai jamais travaillé avec représente les valeurs null par l'omission de l'élément. (Ou de l'attribut, et bonne chance marquage d'un attribut avec xsi:nil.)

4voto

Andy Dent Points 9852

Simplement en omettant l'attribut ou élément fonctionne bien moins formelles de données.

Si vous avez besoin de plus d'information complexe, la GML schémas ajouter l'attribut nilReason, par exemple: dans GeoSciML:

  • xsi:nil avec une valeur "true" est utilisé pour indiquer qu'aucune valeur n'est disponible
  • nilReason peut être utilisé pour enregistrer des informations supplémentaires pour les valeurs manquantes, ce qui peut être celui de la GML raisons (missing, inapplicable, withheld, unknown), ou le texte ajouté par other:, ou peut-être un URI lien pour une explication plus détaillée.

Lorsque vous échangez des données, le rôle pour lequel XML est couramment utilisé, les données envoyées à un seul destinataire ou pour un usage donné, peuvent avoir un contenu obscurci qui serait disponible pour quelqu'un d'autre qui a payé ou si différents de l'authentification. Connaître la raison pourquoi le contenu est manquant peut être très important.

Les scientifiques sont également concernés par les raisons pour lesquelles l'information est manquante. Par exemple, si elle a été abandonnée pour des raisons de qualité, ils veulent peut-être pour voir l'original de mauvaises données.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X