Question

J'ai vu des éléments null représentés de 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 « vide » et null sont sémantiquement différentes):

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

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

L'élément n'est pas présent du tout dans le balisage de retour :

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

L'élément a un élément enfant <null/> ( TStamper ci-dessous):

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

Y at-il une manière correcte ou canonique pour représenter une telle valeur null? Y at-il d'autres moyens que les exemples ci-dessus?

Le fichier XML pour les exemples ci-dessus est artificiel, il ne lit pas trop loin en elle. :)

Était-ce utile?

La solution

xsi: nil est la manière correcte pour représenter une valeur telle que: Lorsque le niveau DOM 2 getElementValue d'appel () est émis, la valeur NULL est renvoyée. xsi:. nil est également utilisé pour indiquer un élément valable sans contenu, même si des éléments que le type de contenu ne permet normalement pas d'éléments vides

Si une balise vide est utilisée, getElementValue () retourne la chaîne vide ( « ») Si l'étiquette est omis, pas d'étiquette de l'auteur est encore présente. Cela peut être sémantiquement différent de le mettre à « néant » (Ex. Réglage « série » à zéro peut être que le livre appartient à aucune série, alors que les séries en omettant pourrait signifier que la série est un élément inapplicable à l'élément courant.)

De: W3C

  

XML Schema: Structures introduit un   mécanisme pour signaler qu'un   élément doit être accepté comme valable · ·   quand il n'a pas de contenu en dépit d'une   le type de contenu qui ne nécessite pas ou   même permettre nécessairement un contenu vide.   Un élément peut être · valide · sans   le contenu si elle a l'attribut   xsi: nulle et la valeur réelle. Un   élément et étiqueté doit être vide, mais   peut transporter des attributs si cela est autorisé par   le type complexe correspondant.

Une clarification:
Si vous avez un élément xml livre et l'un des éléments de l'enfant est le livre: série, vous avez plusieurs options lors de le remplir:

  1. Retrait de l'élément entièrement - Cela 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 transforme xsl de cas (ou d'autres processeurs à base d'événements) qui ont un modèle qui correspond livre: série ne sera jamais appelé. Par exemple, si votre xsl transforme l'élément de livre en ligne de table (xhtml: tr) vous pouvez obtenir le nombre incorrect de cellules de table (xhtml: td). Utilisant cette méthode
  2. En quittant l'élément vide - Cela pourrait indiquer que la série est « », ou est inconnu ou que le livre ne fait pas partie d'une série. Toute transformation xsl (ou autre analyseur à base de evernt) qui correspond livre: série seront appelés. La valeur du courant () sera « ». Vous obtiendrez le même nombre de xhtml. Td balises en utilisant cette méthode comme la suivante décrit un
  3. Utilisation xsi: nil = "true" - Cela signifie que le livre: élément de la série est NULL, non seulement vide. Votre xsl transformer (ou un autre analyseur à base d'événements) qui ont un livre correspondant de modèle: série seront appelés. La valeur du courant () est vide (pas une chaîne vide). La principale différence entre cette méthode et (2) est que le type de livre de schéma: la série n'a pas besoin de permettre à la chaîne vide ( « ») comme une valeur valide. Cela n'a aucun sens réel pour un élément de la série, 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 d'avoir aucune donnée. Un autre exemple serait des éléments de type décimal. Si vous voulez qu'ils soient vides, vous pouvez l'union une chaîne énuméré qui permet seulement « » et une décimale, ou utiliser une décimale qui est nillable.

Autres conseils

Il n'y a pas de réponse canonique, puisque XML a fondamentalement pas de concept nul. Mais je suppose que vous voulez cartographie Xml / objet (depuis graphes d'objets ont des valeurs nulles); donc la réponse pour vous est « quel que soit votre outil utilise ». Si vous écrivez la manipulation, cela signifie que vous préférez. Pour les outils qui utilisent le schéma XML, xsi:nil est le chemin à parcourir. Pour la plupart des cartographes, en omettant élément correspondant / attribut est la façon de le faire.

Cela dépend de la façon dont vous validez votre XML. Si vous utilisez XML validation de schéma, la bonne façon de représenter les valeurs de null est avec l'attribut xsi:nil.

[ Source ]

La documentation dans le lien w3

http://www.w3.org/TR/REC-xml / sec #-starttags

dit que ce sont les formes recommandées.

<test></test>
<test/>

L'attribut mentionné dans l'autre réponse est le mécanisme de validation et non une représentation de l'Etat. S'il vous plaît se référer à la http://www.w3.org/TR/xmlschema-1/ #xsi_nil

  

XML Schema: Structures introduit un mécanisme pour signaler qu'un   élément doit être accepté comme valable · · quand il n'a pas de contenu en dépit d'une   le type de contenu qui ne permet nécessite pas ou même nécessairement vide   contenu. Un élément peut être · valide · sans contenu si elle a la   attribut xsi: nul avec la valeur true. Un élément doit être étiqueté de façon   vide , mais peut porter les attributs si cela est autorisé par le correspondant   type complexe.

Pour clarifier cette réponse:                                                                Contenu                                  

  <Book>
    <!--Invalid construct since the element attribute xsi:nil="true" signal that the element must be empty-->
    <BuildAttributes HardCover="true" Glued="true" xsi:nil="true">
      <anotherAttribute name="Color">Blue</anotherAttribute>
    </BuildAttributes>
    <Index></Index>
    <pages>
      <page pageNumber="1">Content</page>            
    </pages>
    <!--Missing ISBN number could be confusing and misguiding since its not present-->
  </Book>
</Books>

Vous utilisez xsi:nil lorsque votre sémantique de schéma indique 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 est pas présent. Je dois supposer qu'il ya des gens intelligents à qui la phrase précédente n'est pas une idée de soi évidemment terrible, mais il sonne comme neuf sortes de mauvais pour moi. Chaque format XML que j'ai jamais travaillé avec des valeurs nulles représente en omettant l'élément. (Ou un attribut, et bonne chance marquer un attribut avec xsi:nil.)

en omettant simplement l'attribut ou élément fonctionne bien dans les données moins formelles.

Si vous avez besoin d'informations plus sophistiqués, les schémas GML ajoutez l'attribut nilReason, par exemple: dans GeoSciML :

  • xsi:nil avec une valeur « true » est utilisé pour indiquer qu'aucune valeur est disponible
  • nilReason peut être utilisé pour enregistrer des informations supplémentaires pour les valeurs manquantes; cela peut être l'une des raisons standards GML (missing, inapplicable, withheld, unknown), ou d'un texte par préfixé other:, ou peut-être un lien URI 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 destinataire ou à une fin donnée peut avoir un contenu obscurci qui serait disponible à quelqu'un d'autre qui a payé ou avait une authentification différente. La connaissance de la raison pour laquelle le contenu était manquant peut être très important.

Les scientifiques sont également concernés par pourquoi l'information est manquante. Par exemple, si elle a été abandonnée pour des raisons de qualité, ils peuvent vouloir voir les données mauvais d'origine.

Dans de nombreux cas, le but d'une valeur nulle est de servir pour une valeur de données qui n'a pas été présente dans une version antérieure de votre application.

Donc, dire que vous avez un fichier xml de votre application "ReportMaster" version 1.

Maintenant dans la version 2 ReportMaster a quelques autres attributs ont été ajoutés qui peuvent ou non être défini.

Si vous utilisez la représentation « aucune balise signifie null » vous obtenez rétrocompatibilité automatique pour la lecture de votre ReportMaster 1 fichier xml.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top