J'ai vu des 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é comme un élément vide (ce qui, à mon avis, est faux car `` 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 du tout présent dans le balisage renvoyé :
<book>
<title>Beowulf</title>
</book>
L'élément a un <null/>
élément enfant (de TStamper ci-dessous):
<book>
<title>Beowulf</title>
<author><null/></author>
</book>
Existe-t-il une manière correcte ou canonique de représenter une telle null
valeur? Existe-t-il des moyens supplémentaires que les exemples ci-dessus?
Le XML pour les exemples ci-dessus est artificiel, alors ne lisez pas trop loin. :)
xmlns:xsi="http://w3.org/2001/XMLSchema-instance"
. Notez le http: // manquant. C'est important car la chaîne de l'espace de noms n'est en fait qu'une chaîne de l'analyseur xml et non un uri.xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
. Notez "www.". Voir w3.org/TR/xmlschema-1/#no-xsixsi:
préfixe doit être déclaré. Un analyseur XML prenant en charge les espaces de noms rejettera votre document XML si vous essayez d'utiliser lexsi:
préfixe sans le déclarer. La spécification pertinente ici est w3.org/TR/xml-names/#nsc-NSDeclared ("Contrainte d'espace de noms: Préfixe déclaré") qui dit que les seuls préfixes prédéfinis sontxml:
etxmlns:
. Le schéma XML s'appuie sur la spécification des espaces de noms XML mais n'y ajoute aucun préfixe prédéfini supplémentaire, car cela violerait en fait la spécification des espaces de noms XML.Il n'y a pas de réponse canonique, puisque XML n'a fondamentalement pas de concept nul. Mais je suppose que vous voulez un mappage Xml / objet (puisque les graphiques d'objets ont des valeurs nulles); 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 XML Schema,
xsi:nil
c'est la voie à suivre. Pour la plupart des mappeurs, omettre l'élément / l'attribut correspondant est le moyen de le faire.la source
Cela dépend de la manière dont vous validez votre XML. Si vous utilisez la validation de schéma XML, la manière correcte de représenter les
null
valeurs est d' utiliser lexsi:nil
attribut.[ Source ]
la source
La documentation dans le lien w3
http://www.w3.org/TR/REC-xml/#sec-starttags
dit que ce sont les formulaires recommandés.
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
Pour clarifier cette réponse: Contenu
la source
Vous utilisez
xsi:nil
lorsque la sémantique de votre 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 évidemment terrible, mais cela me semble neuf sortes de mauvais. Chaque format XML avec lequel j'ai travaillé représente des valeurs nulles en omettant l'élément. (Ou attribut, et bonne chance pour marquer un attribut avecxsi:nil
.)la source
date
complètement l' élément n'est pas d'une grande aide, car l'application n'aura aucune idée de l'endroit où vous voulez sur la page de titre la date d'apparition. (Si l'élément omis n'a qu'un seul emplacement possible, ce n'est pas un problème; dans les vocabulaires de documents réels, presque tous les éléments ont de nombreux emplacements possibles.)Le simple fait d'omettre l'attribut ou l'élément fonctionne bien dans les données moins formelles.
Si vous avez besoin d'informations plus sophistiquées, les schémas GML ajoutent l'attribut nilReason, par exemple: dans GeoSciML :
xsi:nil
avec une valeur de "vrai" est utilisé pour indiquer qu'aucune valeur n'est disponiblenilReason
peut être utilisé pour enregistrer des informations supplémentaires sur les valeurs manquantes; cela peut être l'une des raisons GML standard (missing, inapplicable, withheld, unknown
), ou du texte précédé deother:
, 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 dans un but donné peuvent avoir un contenu masqué qui serait disponible pour quelqu'un d'autre qui a payé ou qui avait une authentification différente. Connaître la raison pour laquelle le contenu manquait peut être très important.
Les scientifiques s'inquiètent également des raisons pour lesquelles les informations manquent. Par exemple, s'il a été supprimé pour des raisons de qualité, ils peuvent souhaiter voir les données incorrectes d'origine.
la source
Dans de nombreux cas, le but 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.
Disons que vous avez un fichier xml de votre application "ReportMaster" version 1.
Désormais, dans ReportMaster version 2, quelques attributs supplémentaires ont été ajoutés qui peuvent ou non être définis.
Si vous utilisez la représentation «aucune balise signifie null», vous obtenez une rétrocompatibilité automatique pour la lecture de votre fichier xml ReportMaster 1.
la source