Was ist der richtige Weg, um null XML-Elemente darzustellen?

Ich habe null auf verschiedene Arten dargestellt:

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

   Beowulf   

Das Element ist vorhanden, aber als leeres Element dargestellt (was ich glaube, ist falsch, da ‘leer’ und null semantisch verschieden sind):

   Beowulf     Beowulf   

Das Element ist im zurückgegebenen Markup überhaupt nicht vorhanden :

   Beowulf  

Das Element hat ein Kindelement (von TStamper unten):

   Beowulf   

Gibt es eine korrekte oder kanonische Methode, um einen solchen null darzustellen? Gibt es zusätzliche Möglichkeiten als die obigen Beispiele?

Das XML für die obigen Beispiele ist erfunden, also lies es nicht zu weit hinein. 🙂

Solutions Collecting From Web of "Was ist der richtige Weg, um null XML-Elemente darzustellen?"

xsi: nil ist der richtige Weg, um einen Wert wie folgt darzustellen: Wenn der Aufruf getElementValue () von DOM Level 2 ausgegeben wird, wird der NULL-Wert zurückgegeben. xsi: nil wird auch verwendet, um ein gültiges Element ohne Inhalt anzugeben, auch wenn dieser Elementinhaltstyp normalerweise keine leeren Elemente zulässt.

Wenn ein leeres Tag verwendet wird, gibt getElementValue () den leeren String (“”) zurück. Wenn das Tag weggelassen wird, ist kein Author-Tag vorhanden. Dies kann semantisch anders sein als das Setzen auf ‘nil’ (Bsp. Einstellung “Series” auf nil könnte sein, dass das Buch keiner Serie angehört, während das Weglassen von Serien bedeuten könnte, dass series ein nicht anwendbares Element für das aktuelle Element ist.)

Von: Das W3C

XML Schema: Structures führt einen Mechanismus ein, um zu signalisieren, dass ein Element als gültig akzeptiert werden soll, wenn es keinen Inhalt hat, trotz eines Inhaltstyps, der keinen leeren Inhalt erfordert oder sogar erlaubt. Ein Element kann ohne Inhalt gültig sein, wenn es das Attribut xsi: nil mit dem Wert true hat. Ein so markiertes Element muss leer sein, kann aber Attribute tragen, wenn es der entsprechende komplexe Typ zulässt.

Eine Klarstellung:
Wenn Sie ein Buch xml-Element haben und eines der untergeordneten Elemente book: series ist, haben Sie beim Ausfüllen mehrere Möglichkeiten:

  1. Vollständiges Entfernen des Elements – Dies kann durchgeführt werden, wenn Sie angeben möchten, dass die Serie für dieses Buch nicht gilt oder das Buch nicht Teil einer Serie ist. In diesem Fall werden xsl-Transformationen (oder andere ereignisbasierte processoren) mit einer Vorlage, die mit book: series übereinstimmt, nie aufgerufen. Wenn Ihr xsl beispielsweise das Buchelement in eine Tabellenzeile (xhtml: tr) umwandelt, erhalten Sie möglicherweise die falsche Anzahl von Tabellenzellen (xhtml: td) mit dieser Methode.
  2. Das Element leer lassen – Dies könnte anzeigen, dass die Serie “” ist oder unbekannt ist oder dass das Buch nicht Teil einer Serie ist. Jede xsl-Transformation (oder ein anderer evernt-basierter Parser), die mit book: series übereinstimmt, wird aufgerufen. Der Wert von current () wird “” sein. Sie erhalten die gleiche Anzahl von xhtml: td Tags mit dieser Methode wie mit der nächsten beschriebenen.
  3. Mit xsi: nil = “true” – Dies bedeutet, dass das Buch: Serie-Element ist NULL, nicht nur leer. Ihre xsl-Transformation (oder ein anderer ereignisbasierter Parser) mit einer Vorlage, die Buch: Serie entspricht, wird aufgerufen. Der Wert von current () ist leer (keine leere Zeichenfolge). Der Hauptunterschied zwischen dieser Methode und (2) besteht darin, dass der Schematyp “Buch: Reihe” die leere Zeichenfolge (“”) nicht als gültigen Wert zulassen muss. Dies ist für ein Reihenelement nicht sinnvoll, aber für ein Sprachelement, das im Schema als Aufzählungstyp definiert ist, ermöglicht xsi: nil = “true”, dass das Element keine Daten enthält. Ein anderes Beispiel wären Elemente vom Typ dezimal. Wenn Sie möchten, dass sie leer sind, können Sie eine Aufzählungszeichenfolge zusammenführen, die nur “” und eine Dezimalzahl erlaubt, oder eine Dezimalzahl verwenden, die nillierbar ist.

Es gibt keine kanonische Antwort, da XML grundsätzlich kein Null-Konzept hat. Aber ich nehme an, Sie wollen Xml / Object Mapping (da Objekt Graphen Nullen haben); Also lautet die Antwort für Sie “was auch immer Ihr Werkzeug verwendet”. Wenn Sie Handling schreiben, bedeutet das, was immer Sie bevorzugen. Für Tools, die XML-Schema verwenden, ist xsi:nil der Weg zu gehen. Für die meisten Mapper ist das Weglassen passender Elemente / Attribute die beste Vorgehensweise.

Es hängt davon ab, wie Sie Ihr XML validieren. Wenn Sie die validation von XML-Schemas verwenden, ist die korrekte Darstellung von null mit dem Attribut xsi:nil .

[ Quelle ]

Die Dokumentation im w3-Link

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

sagt, dass dies die empfohlenen Formen sind.

   

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

XML Schema: Structures führt einen Mechanismus ein , um zu signalisieren, dass ein Element als gültig akzeptiert werden soll, wenn es keinen Inhalt hat, trotz eines Inhaltstyps, der keinen leeren Inhalt erfordert oder sogar erlaubt. Ein Element kann ohne Inhalt gültig sein, wenn es das Attribut xsi: nil mit dem Wert true hat. Ein so markiertes Element muss leer sein , kann aber Attribute tragen, wenn es der entsprechende komplexe Typ zulässt.

Um diese Antwort zu klären: Inhalt

     Blue    Content     

Sie verwenden xsi:nil wenn Ihre xsi:nil angibt, dass ein Element einen Standardwert hat und dass der Standardwert verwendet werden soll, wenn das Element nicht vorhanden ist. Ich muss annehmen, dass es schlaue Leute gibt, denen der vorhergehende Satz keine offensichtlich schreckliche Idee ist, aber es klingt wie neun Arten von schlecht für mich. Jedes XML-Format, mit dem ich jemals gearbeitet habe, repräsentiert Nullwerte, indem das Element weggelassen wird. (Oder Attribut, und viel Glück markiert ein Attribut mit xsi:nil .)

Das einfache Weglassen des Attributs oder Elements funktioniert in weniger formalen Daten gut.

Wenn Sie anspruchsvollere Informationen benötigen, fügen die GML-Schemas das Attribut nilReason hinzu, z. B .: in GeoSciML :

  • xsi:nil mit dem Wert “true” wird verwendet, um anzuzeigen, dass kein Wert verfügbar ist
  • nilReason kann verwendet werden, um zusätzliche Informationen für fehlende Werte aufzuzeichnen; Dies kann einer der Standard-GML-Gründe sein ( missing, inapplicable, withheld, unknown ), oder Text, der durch other: vorangestellt wird, oder kann ein URI-Link zu einer detaillierteren Erklärung sein.

Wenn Sie Daten austauschen, die Rolle, für die XML häufig verwendet wird, können Daten, die an einen Empfänger oder für einen bestimmten Zweck gesendet werden, Inhalte verschleiert haben, die für eine andere Person verfügbar sind, die bezahlt oder eine andere Authentifizierung ausgeführt hat. Zu wissen, warum Inhalte fehlen, kann sehr wichtig sein.

Wissenschaftler beschäftigen sich auch damit, warum Informationen fehlen. Wenn sie beispielsweise aus Qualitätsgründen gelöscht wurde, möchten sie möglicherweise die ursprünglichen ungültigen Daten sehen.

In vielen Fällen dient ein Null-Wert dazu, einen Datenwert zu liefern, der in einer früheren Version Ihrer Anwendung nicht vorhanden war.

Also sagen Sie, Sie haben eine XML-Datei von Ihrer Anwendung “ReportMaster” Version 1.

In ReportMaster Version 2 wurden nun einige weitere Attribute hinzugefügt, die nicht definiert werden können.

Wenn Sie die Darstellung ‘no tag means null’ verwenden, erhalten Sie automatisch Abwärtskompatibilität zum Lesen Ihrer ReportMaster 1 XML-Datei.