Ich habe null
Elemente gesehen , die auf verschiedene Arten dargestellt wurden:
Das Element ist vorhanden mit xsi:nil="true"
:
<book>
<title>Beowulf</title>
<author xsi:nil="true"/>
</book>
Das Element ist vorhanden, wird aber als leeres Element dargestellt (was meiner Meinung nach seit 'leer' falsch ist und null
semantisch unterschiedlich ist):
<book>
<title>Beowulf</title>
<author/>
</book>
<!-- or: -->
<book>
<title>Beowulf</title>
<author></author>
</book>
Das Element ist im zurückgegebenen Markup überhaupt nicht vorhanden :
<book>
<title>Beowulf</title>
</book>
Das Element hat ein <null/>
untergeordnetes Element (von TStamper unten):
<book>
<title>Beowulf</title>
<author><null/></author>
</book>
Gibt es eine korrekte oder kanonische Möglichkeit, einen solchen null
Wert darzustellen ? Gibt es zusätzliche Möglichkeiten als die obigen Beispiele?
Das XML für die obigen Beispiele ist erfunden, lesen Sie also nicht zu weit hinein. :) :)
xmlns:xsi="http://w3.org/2001/XMLSchema-instance"
. Beachten Sie das fehlende http: //. Dies ist wichtig, da die Namespace-Zeichenfolge eigentlich nur eine Zeichenfolge für den XML-Parser und keine URL ist.xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
. Beachten Sie "www.". Siehe w3.org/TR/xmlschema-1/#no-xsixsi:
Präfix muss deklariert werden. Ein Namespace-fähiger XML-Parser lehnt Ihr XML-Dokument ab, wenn Sie versuchen, dasxsi:
Präfix zu verwenden, ohne es zu deklarieren. Die relevante Spezifikation hier ist w3.org/TR/xml-names/#nsc-NSDeclared ("Namespace-Einschränkung: Präfix deklariert"), die besagt, dass die einzigen vordefinierten Präfixexml:
und sindxmlns:
. Das XML-Schema baut auf der XML-Namespace-Spezifikation auf, fügt ihr jedoch keine zusätzlichen vordefinierten Präfixe hinzu, da dies tatsächlich die XML-Namespace-Spezifikation verletzen würde.Es gibt keine kanonische Antwort, da XML grundsätzlich kein Nullkonzept hat. Ich gehe jedoch davon aus, dass Sie eine XML / Objekt-Zuordnung wünschen (da Objektdiagramme Nullen haben). Die Antwort für Sie lautet also "was auch immer Ihr Werkzeug verwendet". Wenn Sie Handling schreiben, bedeutet das, was Sie bevorzugen. Für Tools, die XML-Schema verwenden,
xsi:nil
ist dies der richtige Weg. Für die meisten Mapper ist das Weglassen eines passenden Elements / Attributs die richtige Vorgehensweise.quelle
Dies hängt davon ab, wie Sie Ihr XML validieren. Wenn Sie die XML-Schemaüberprüfung verwenden,
null
wird dasxsi:nil
Attribut korrekt dargestellt .[ Quelle ]
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 Validierungsmechanismus und keine Darstellung des Zustands. Weitere Informationen finden Sie unter http://www.w3.org/TR/xmlschema-1/#xsi_nil
Um diese Antwort zu verdeutlichen: Inhalt
quelle
Sie werden verwendet,
xsi:nil
wenn Ihre Schemasemantik angibt, dass ein Element einen Standardwert hat und dass der Standardwert verwendet werden sollte, wenn das Element nicht vorhanden ist. Ich muss davon ausgehen, dass es kluge Leute gibt, für die der vorstehende Satz keine selbstverständlich schreckliche Idee ist, aber es klingt für mich nach neun Arten von Schlechtem. Jedes XML-Format, mit dem ich jemals gearbeitet habe, repräsentiert Nullwerte, indem das Element weggelassen wird. (Oder Attribut und viel Glück beim Markieren eines Attributs mitxsi:nil
.)quelle
date
vollständige Weglassen des Elements keine große Hilfe, da die App keine Ahnung hat, wo auf der Titelseite Sie möchten das Datum, das angezeigt werden soll. (Wenn das ausgelassene Element nur eine mögliche Position hat, ist dies kein Problem. In realen Dokumentenvokabularen haben fast alle Elemente viele mögliche Positionen.)Das einfache Weglassen des Attributs oder Elements funktioniert in weniger formalen Daten gut.
Wenn Sie komplexere 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 istnilReason
kann verwendet werden, um zusätzliche Informationen für fehlende Werte aufzuzeichnen; Dies kann einer der Standard-GML-Gründe (missing, inapplicable, withheld, unknown
) oder der von vorangestellte Text seinother:
oder ein URI-Link zu einer detaillierteren Erklärung sein.Wenn Sie Daten austauschen, die Rolle, für die XML üblicherweise verwendet wird, können Daten, die an einen Empfänger oder für einen bestimmten Zweck gesendet werden, verdeckte Inhalte aufweisen, die für eine andere Person verfügbar sind, die bezahlt hat oder eine andere Authentifizierung hatte. Es kann sehr wichtig sein, den Grund zu kennen, warum Inhalte fehlten.
Wissenschaftler sind auch besorgt darüber, warum Informationen fehlen. Wenn es beispielsweise aus Qualitätsgründen gelöscht wurde, möchten sie möglicherweise die ursprünglichen fehlerhaften Daten anzeigen.
quelle
In vielen Fällen dient ein Nullwert dazu, einen Datenwert zu liefern, der in einer früheren Version Ihrer Anwendung nicht vorhanden war.
Angenommen, Sie haben eine XML-Datei aus Ihrer Anwendung "ReportMaster" Version 1.
In ReportMaster Version 2 wurden einige weitere Attribute hinzugefügt, die möglicherweise definiert sind oder nicht.
Wenn Sie die Darstellung "Kein Tag bedeutet Null" verwenden, erhalten Sie eine automatische Abwärtskompatibilität zum Lesen Ihrer ReportMaster 1-XML-Datei.
quelle