Frage

Ich habe null Elemente auf verschiedene Weise dargestellt gesehen:

Das Element vorhanden ist, mit xsi:nil="true":

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

Das Element vorhanden ist, sondern als ein leeres Element dargestellt (was ich glaube falsch ist, da 'leer' und null semantisch verschieden sind):

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

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

Das Element ist nicht vorhanden überhaupt in dem zurück Markup :

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

Das Element hat ein <null/> geordnetes Element (von TStamper unten):

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

Gibt es eine richtige oder kanonische Weg, ein solches null Wert darzustellen? Gibt es weitere Möglichkeiten, als die obigen Beispiele?

Die XML für die obigen Beispiele sind gekünstelt, so lesen nicht zu weit hinein. :)

War es hilfreich?

Lösung

xsi: nil ist der richtige Weg, um einen Wert zu repräsentieren, so dass: Wenn der DOM Level 2 Aufruf getElementValue () ausgegeben wird, wird der NULL-Wert zurückgegeben. xsi:. nil ist auch ein gültiges Element ohne Inhalt auch Inhaltstyp normalerweise, wenn diese Elemente nicht verwendet, um anzuzeigen leere Elemente erlaubt

Wenn ein leerer Tag verwendet wird, getElementValue () gibt die leere Zeichenfolge ( "") Wenn der Tag weggelassen wird, dann ist kein Autor Tag noch vorhanden. Dies kann semantisch anders sein, als es zu ‚Null‘ -Einstellung (Ex. Einstellung „Serie“ zu null sein kann, dass das Buch zu keiner Serie gehört, während Serie Weglassen dieser Serie könnte bedeuten, ein unanwendbar Element auf das aktuelle Element ist.)

Von: Der W3C

  

XML Schema: Strukturen stellt ein   Mechanismus zur Signalisierung, dass ein   Element sollte als · gültig akzeptiert ·   wenn es keinen Inhalt hat trotz eines   Inhaltstyp, die nicht erfordert oder   auch unbedingt leeren Inhalt ermöglichen.   Ein Element kann · gültig · ohne   Inhalt, wenn es das Attribut   xsi: nil mit dem Wert true. Ein   so markiertes Element muss leer sein, aber   können Attribute tragen, wenn ERLAUBTEM   der entsprechende komplexe Typ.

Eine Klarstellung:
Wenn Sie ein Buch XML-Element und einer der untergeordneten Elemente haben, ist Buch: Serie haben Sie mehrere Möglichkeiten beim Füllen Sie es aus:

  1. das Element Entfernen vollständig - Dies kann geschehen, wenn Sie angeben möchten, dass Serie nicht auf dieses Buch gilt oder das Buch ist nicht Teil einer Serie. In diesem Fall xsl-Transformationen (oder ein anderes Ereignis basierten Prozessoren), die eine Vorlage haben, die Buch passt: Serie wird nie aufgerufen werden. Zum Beispiel, wenn Ihr xsl das Buch Element in Tabellenzeile dreht (xhtml: tr) wird möglicherweise die falsche Anzahl von Tabellenzellen erhalten (xhtml: td). Mit dieser Methode
  2. Beim Verlassen des Elements leer - Dies könnte darauf hindeuten, dass die Serie ist „“, oder unbekannt ist, oder dass das Buch nicht Teil einer Serie ist. Jede xsl-Transformation (oder andere evernt basierte Parser), das Buch übereinstimmt: Serie wird aufgerufen. Der Wert des Stroms () wird „“. Sie werden die gleiche Anzahl von xhtml erhalten. Td-Tags mit dieser Methode wie bei dem nächsten beschrieben
  3. Verwenden von xsi: nil = "true" - Dies bedeutet, dass das Buch: Serienelement ist NULL, nicht nur leer. Ihre xsl-Transformation (oder ein anderes Ereignis basierte Parser), die ein Template-Matching Buch haben: Serie wird aufgerufen. Der Wert des Stroms () leer (nicht leere Zeichenkette) sein. Der wesentliche Unterschied zwischen diesem Verfahren und (2) ist, dass das Schema Buchtyp: Serie braucht nicht der leere Zeichenfolge ( „“) als gültigen Wert zu ermöglichen. Das macht keinen wirklichen Sinn für ein Serienelement, sondern für ein Sprachelement, das als Aufzählungstyp in dem Schema, xsi definiert ist: nil = „true“ ermöglicht es das Element keine Daten zu haben. Ein weiteres Beispiel wäre Elemente vom Typ Dezimalzahl sein. Wenn Sie wollen, dass sie leer Sie sein können Vereinigung ein Aufzählungs Zeichenfolge, die nur „“ und eine Dezimalzahl erlaubt, oder eine Dezimalzahl verwenden, die nillable ist.

Andere Tipps

Es gibt keine kanonische Antwort, da XML hat grundsätzlich kein Null-Konzept. Aber ich nehme an, Sie Xml / Objekt-Mapping wollen (da Objektgraphen nulls haben); so die Antwort für Sie ist „was auch immer Ihr Werkzeug verwendet“. Wenn Sie Schreib Handhabung, bedeutet, dass, was auch immer Sie bevorzugen. Für Werkzeuge, die XML-Schema verwenden, ist xsi:nil der Weg zu gehen. Für die meisten Mapper Weglassen passendes Element / Attribut ist die Art und Weise, es zu tun.

Es hängt davon ab, wie Sie Ihre XML-Validierung. Wenn Sie XML-Schema-Validierung verwenden, die richtige Art und Weise null Werte darstellen, mit dem xsi:nil Attribute.

[ Quelle ]

Die Dokumentation in dem w3 Link

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

sagt, dass dies sind die recomended Formen.

<test></test>
<test/>

Das Attribut in der anderen Antwort erwähnt ist Validierungsmechanismus und keine Repräsentation des Staates. Bitte beachten Sie die http://www.w3.org/TR/xmlschema-1/ #xsi_nil

  

XML Schema: Strukturen führen einen Mechanismus zur Signalisierung, dass ein   Element sollte akzeptiert werden · gültig · , wenn es keinen Inhalt hat trotz eines   Inhaltstyp, das nicht erforderlich und auch nicht unbedingt leer lassen   Inhalt. Ein Element kann gültig sein, ohne Inhalt, wenn es das ist   Attribut xsi: nil mit dem Wert true. Ein Element so beschriftet sein muss   leer , kann aber Attribute tragen, wenn durch die entsprechenden zulässigen   komplexer Typ.

Sie diese Antwort Um zu klären:                                                                Inhalt                                  

  <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>

Sie verwenden xsi:nil wenn Ihr Schema Semantik zeigen an, dass ein Element einen Standardwert hat, und dass der Standardwert verwendet werden soll, wenn das Element nicht vorhanden ist. Ich muß davon ausgehen, dass es intelligent Leute, die der vorstehende Satz ist keine selbstverständlich schreckliche Idee, aber es klingt wie neun Arten von schlecht zu mir. Jedes XML-Format, das ich je gearbeitet habe repräsentiert mit Nullwerten durch das Element weggelassen wird. (Oder Attribut, und viel Glück Markierung ein Attribut mit xsi:nil.)

Einfach Weglassen das Attribut oder Element funktioniert gut in weniger formalen Daten.

Wenn Sie anspruchsvollere Informationen benötigen, fügen Sie das GML-Schema das Attribut nilReason, zB: in GeoSciML :

  • xsi:nil mit einem Wert von „true“ verwendet wird, um anzuzeigen, dass kein Wert verfügbar ist
  • nilReason verwendet werden kann, um zusätzliche Informationen für aufzeichnen Werte fehlen; dies kann eine der Standard GML Gründe (missing, inapplicable, withheld, unknown) oder Text vorangestellt sein von other:, oder kann ein URI Link auf eine ausführlichere Erklärung.

Wenn Sie Daten austauschen, die Rolle, für die XML häufig verwendet wird, Daten an einen Empfänger oder für einen bestimmten Zweck gesendet wird, kann Inhalt haben verschleiert, dass jemand anderem zur Verfügung stehen würde, die dafür bezahlt oder hatten verschiedene Authentifizierung. den Grund zu wissen, warum Inhalt fehlte kann sehr wichtig sein.

Die Wissenschaftler sind auch besorgt mit, warum Informationen fehlen. Zum Beispiel, wenn es aus Qualitätsgründen fallen gelassen wurde, können sie die ursprüngliche schlechte Daten sehen wollen.

In vielen Fällen ist der Zweck eines Null-Wert ist für einen Datenwert zu dienen, die nicht in einer früheren Version Ihrer Anwendung war.

So sagen Sie eine XML-Datei aus Ihrer Anwendung haben "ReportMaster" Version 1.

Jetzt in ReportMaster Version 2 a einige weitere Attribute hinzugefügt worden, die definiert werden kann oder nicht.

Wenn Sie die ‚kein Tag bedeutet null‘ Darstellung, die Sie erhalten automatische Rückwärtskompatibilität für Ihre ReportMaster 1 XML-Datei zu lesen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top