J'ai vu null
éléments représentés de plusieurs manières:
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é sous la forme d'un élément vide (ce qui, à mon avis, est erroné car 'empty' 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 du tout présent dans le balisage renvoyé :
<book>
<title>Beowulf</title>
</book>
L'élément a un élément enfant <null/>
(de TStamper ci-dessous):
<book>
<title>Beowulf</title>
<author><null/></author>
</book>
Existe-t-il un moyen correct ou canonique de représenter une telle valeur null
? Existe-t-il d'autres moyens que les exemples ci-dessus?
Le XML pour les exemples ci-dessus est artificiel, ne le lisons donc pas trop loin. :)
xsi: nil est le moyen correct de représenter une valeur telle que: Lorsque l'appel du niveau 2 de get getElementValue () est émis, la valeur NULL est renvoyée. xsi: nil est également utilisé pour indiquer un élément valide sans contenu, même si ce type de contenu n'autorise normalement pas les éléments vides.
Si une balise vide est utilisée, getElementValue () renvoie la chaîne vide (""). Si la balise est omise, aucune balise auteur n'est même présente. Cela peut être sémantiquement différent que de le définir sur "nil" (par exemple, si vous définissez "Série" sur nil, le livre n'appartient à aucune série, alors que l'omission de séries peut signifier que la série est un élément inapplicable à l'élément actuel.)
De: Le W3C
Schéma XML: Les structures introduisent un mécanisme pour signaler qu'un élément doit être accepté comme · valide · lorsqu'il n'a pas de contenu malgré un type de contenu qui n'exige pas, voire ne permet même pas, un contenu vide. Un élément peut être · valide · sans contenu s'il possède l'attribut xsi: nil avec la valeur true. Un élément ainsi étiqueté doit être vide, mais peut porter des attributs si le type complexe correspondant le permet.
Une clarification:
Si vous avez un élément book xml et que l’un des éléments enfants est book: series, vous avez plusieurs options pour le remplir:
Il n'y a pas de réponse canonique, puisque XML n'a fondamentalement pas de concept null. Mais je suppose que vous voulez un mappage Xml/Object (puisque les graphes d’objets ont des valeurs NULL); la réponse pour vous est donc "tout ce que votre outil utilise". Si vous écrivez la manipulation, cela signifie ce que vous préférez. Pour les outils qui utilisent un schéma XML, xsi:nil
est la voie à suivre. Pour la plupart des mappeurs, omettre l'élément/l'attribut correspondant est le moyen de le faire.
Cela dépend de la façon dont vous validez votre XML. Si vous utilisez la validation de schéma XML, la manière correcte de représenter les valeurs null
consiste à utiliser 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 un mécanisme de validation et non une représentation d'état. Veuillez vous référer au http://www.w3.org/TR/xmlschema-1/#xsi_nil
Schéma XML: les structures introduisent un mécanisme pour signaler qu'un élément doit être accepté comme · valide · lorsqu'il n'a pas de contenu malgré un type de contenu qui ne nécessite pas ou même autoriser nécessairement un contenu vide. Un élément peut être · valide · sans contenu s'il possède l'attribut xsi: nil avec la valeur true. Un élément ainsi libellé doit être vide , mais peut porter des attributs si le type complexe correspondant le permet.
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 n'est pas présent. Je dois supposer qu'il y a des gens intelligents pour qui la phrase précédente n'est pas une idée en soi terrible, mais cela ressemble à neuf sortes de mauvaises choses pour moi. Chaque format XML avec lequel j'ai travaillé représente des valeurs null en omettant l'élément. (Ou attribut, et bonne chance pour marquer un attribut avec xsi:nil
.)
Le simple fait de supprimer l'attribut ou l'élément fonctionne bien dans des données moins formelles.
Si vous avez besoin d'informations plus sophistiquées, les schémas GML ajoutent l'attribut nilReason, par exemple: in GeoSciML :
xsi:nil
_ avec la valeur "true" est utilisé pour indiquer qu'aucune valeur n'est disponiblenilReason
peut être utilisé pour enregistrer des informations supplémentaires sur les valeurs manquantes; il peut s'agir de l'une des raisons GML standard (_missing, inapplicable, withheld, unknown
_) ou de texte précédé de _other:
_, ou peut être un lien URI vers 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 peuvent avoir un contenu masqué qui serait disponible pour une autre personne ayant effectué une authentification payante ou différente. Connaître la raison pour laquelle le contenu était manquant peut être très important.
Les scientifiques s'inquiètent également de la raison pour laquelle l'information manque. Par exemple, si elle a été supprimée pour des raisons de qualité, ils peuvent vouloir voir les données incorrectes d'origine.
Dans de nombreux cas, l'objectif d'une valeur Null est de servir une valeur de données qui n'était pas présente dans une version précédente de votre application.
Supposons donc que vous avez un fichier XML de votre application "ReportMaster" version 1.
Maintenant, dans la version 2 de ReportMaster, quelques attributs supplémentaires ont été ajoutés qui peuvent ou non être définis.
Si vous utilisez la représentation "no tag signifie null", vous obtenez une compatibilité ascendante automatique pour la lecture de votre fichier XML ReportMaster 1.