Widziałem null
elementy reprezentowane na kilka sposobów:
Element występuje z xsi:nil="true"
:
<book>
<title>Beowulf</title>
<author xsi:nil="true"/>
</book>
Element jest obecny, ale reprezentowany jako element pusty (co moim zdaniem jest błędne, ponieważ jest `` pusty '' i null
różni się semantycznie):
<book>
<title>Beowulf</title>
<author/>
</book>
<!-- or: -->
<book>
<title>Beowulf</title>
<author></author>
</book>
Elementu w ogóle nie ma w zwracanym znaczniku :
<book>
<title>Beowulf</title>
</book>
Element ma element <null/>
potomny (z TStamper poniżej):
<book>
<title>Beowulf</title>
<author><null/></author>
</book>
Czy istnieje poprawny lub kanoniczny sposób przedstawienia takiej null
wartości? Czy istnieją inne sposoby niż powyższe przykłady?
XML dla powyższych przykładów jest sztuczny, więc nie czytaj go zbytnio. :)
xmlns:xsi="http://w3.org/2001/XMLSchema-instance"
. Zwróć uwagę na brakujący http: //. Jest to ważne, ponieważ ciąg przestrzeni nazw jest w rzeczywistości tylko ciągiem do parsera xml, a nie identyfikatorem URI.xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
. Uwaga „www.”. Zobacz w3.org/TR/xmlschema-1/#no-xsixsi:
prefiks musi zostać zadeklarowany. Analizator składni XML uwzględniający przestrzeń nazw odrzuci dokument XML, jeśli spróbujesz użyćxsi:
przedrostka bez deklarowania go. Odpowiednia specyfikacja to w3.org/TR/xml-names/#nsc-NSDeclared ("Ograniczenie przestrzeni nazw: zadeklarowany prefiks"), która mówi, że jedynymi predefiniowanymi przedrostkami sąxml:
ixmlns:
. Schemat XML opiera się na specyfikacji przestrzeni nazw XML, ale nie dodaje do niej żadnych dodatkowych predefiniowanych przedrostków, ponieważ w rzeczywistości naruszyłoby to specyfikację przestrzeni nazw XML.Nie ma kanonicznej odpowiedzi, ponieważ XML zasadniczo nie ma pojęcia zerowego. Ale zakładam, że chcesz mapować Xml / Object (ponieważ wykresy obiektów mają wartości null); więc odpowiedzią dla ciebie jest „cokolwiek używa twoje narzędzie”. Jeśli piszesz obsługę, oznacza to, co wolisz. W przypadku narzędzi korzystających ze schematu XML
xsi:nil
jest do zrobienia. W przypadku większości maperów sposobem na zrobienie tego jest pominięcie pasującego elementu / atrybutu.źródło
To zależy od tego, jak zweryfikujesz swój XML. Jeśli używasz sprawdzania poprawności schematu XML, prawidłowym sposobem przedstawiania
null
wartości jestxsi:nil
atrybut.[ Źródło ]
źródło
Dokumentacja w linku w3
http://www.w3.org/TR/REC-xml/#sec-starttags
mówi, że to są zalecane formy.
Atrybut wymieniony w drugiej odpowiedzi to mechanizm walidacji, a nie reprezentacja stanu. Zapoznaj się z http://www.w3.org/TR/xmlschema-1/#xsi_nil
Aby wyjaśnić tę odpowiedź: Treść
źródło
Użyć
xsi:nil
, gdy semantyka schematu wynika, że element ma wartość domyślną, a wartość domyślna powinny być stosowane, jeśli element nie jest obecny. Muszę założyć, że są mądrzy ludzie, dla których poprzednie zdanie nie jest ewidentnie okropnym pomysłem, ale dla mnie brzmi to jak dziewięć rodzajów złego. Każdy format XML, z jakim kiedykolwiek pracowałem, reprezentuje wartości null, pomijając element. (Lub atrybut i powodzenia w oznaczaniu atrybutu za pomocąxsi:nil
.)źródło
date
całkowite pominięcie elementu nie jest zbyt pomocne, ponieważ aplikacja nie będzie miała pojęcia, gdzie na stronie tytułowej chcesz data pojawienia się. (Jeśli pominięty element ma tylko jedną możliwą lokalizację, nie stanowi to problemu; w prawdziwych słownikach dokumentów prawie wszystkie elementy mają wiele możliwych lokalizacji.)Zwykłe pominięcie atrybutu lub elementu działa dobrze w mniej formalnych danych.
Jeśli potrzebujesz bardziej wyrafinowanych informacji, schematy GML dodają atrybut nilReason, np .: w GeoSciML :
xsi:nil
z wartością „prawda” służy do wskazania, że żadna wartość nie jest dostępnanilReason
można wykorzystać do zapisania dodatkowych informacji o brakujących wartościach; może to być jeden ze standardowych powodów GML (missing, inapplicable, withheld, unknown
) lub tekst poprzedzonyother:
lub może być odsyłaczem URI do bardziej szczegółowego wyjaśnienia.Podczas wymiany danych, w przypadku roli, do której powszechnie używany jest XML, dane wysyłane do jednego odbiorcy lub w określonym celu mogą mieć zasłoniętą zawartość, która byłaby dostępna dla kogoś innego, kto zapłacił lub miał inne uwierzytelnienie. Znajomość przyczyny braku treści może być bardzo ważna.
Naukowcy martwią się również, dlaczego brakuje informacji. Na przykład, jeśli został usunięty ze względu na jakość, mogą chcieć zobaczyć oryginalne złe dane.
źródło
W wielu przypadkach wartość Null służy do obsługi wartości danych, których nie było w poprzedniej wersji aplikacji.
Powiedzmy, że masz plik xml z aplikacji „ReportMaster” w wersji 1.
Teraz w ReportMaster w wersji 2 dodano więcej atrybutów, które mogą być zdefiniowane lub nie.
Jeśli użyjesz reprezentacji „brak tagu oznacza zero”, uzyskasz automatyczną wsteczną zgodność odczytu pliku XML ReportMaster 1.
źródło