2010-09-21 12 views
21

czy wiesz, czy istnieje różnica między tymi tagami w XML/XSD?Jaka jest różnica między <a_element /> a <a_element xsi: nil = "true" />?

<a_element /> and <a_element xsi:nil="true"/> 

np:

<SpreadCurve> 
     <Index>3M</Index> 
     <IndexNumber>4587</IndexNumber> 
     <BusinessArea xsi:nil="true" /> 
</SpreadCurve> 

and 

<SpreadCurve> 
     <Index>3M</Index> 
     <IndexNumber>4587</IndexNumber> 
     <BusinessArea /> 
</SpreadCurve> 

Są one równoważne?

Jeśli mam element xsd:

<xsd:element name="BusinessArea" type="xsd:string"/> 

oznacza to, że jest domyślnie xsi: nil = "false". A to oznacza, że ​​nie zaakceptuje wartości pustej dla tego elementu.

Wątpię, czy przyjmie to?

<BusinessArea /> 

Co to naprawdę oznacza dla XSD?

poważaniem

+0

Podobne zapytania XML zamiast xsd: [Co robi i: nil = „true” oznacza? ] (http://stackoverflow.com/questions/463597/what-does-inil-true-mean) –

Odpowiedz

0

moim rozumieniu jest to, że nie są one takie same. Przynajmniej, jeśli chcesz zweryfikować xml względem schematu. Jeśli w schemacie można zdefiniować element jako nillable, powiedzmy:

<xsd:element name="SomeName" type="xsd:double" nillable="true"/> 

Trzeba wyraźnie w xml ustawić ten element na null, na przykład:

<SomeName xsi:nill="true" /> 

Jeśli w swoim XML element jest jak <SomeName />, nie będzie poprawny zgodnie ze schematem.

+0

Pytanie nie mówi o xsd: double, ale o xsd: string. Pusty ciąg "" będzie renderować nieprawidłowy względem xsd: double, ale będzie renderował się przeciwko xsd: string – Niek

3

XML Schema: Struktury wprowadza mechanizm sygnalizacji że element powinny być przyjmowane jako · poprawny · gdy nie ma treści, mimo rodzaju zawartości, która nie wymaga ani nawet koniecznie umożliwić pusty treści. Element może być · poprawny · bez zawartości , jeśli ma atrybut xsi: nil z wartością true. Tak oznaczony element musi być pusty, ale może przenosić atrybuty, jeśli zezwala na to odpowiedni typ złożony.

Źródło: http://www.w3.org/TR/xmlschema-1/#xsi_nil

13

dostać to jako XSD BusinessArea powinna być zdefiniowana jako nillable = "true". Coś takiego:

<xsd:element name="BusinessArea" nillable="true"> 
..... 
</xsd:element> 

Co to oznacza, że ​​element BusinessArea może mieć wartość pustą, tj. Pustą.

A jeśli element XML nie zawiera żadnych wartości to musi mieć atrybutu xsi: nil = "true":

<BusinessArea xsi:nil="true" /> 

ten powinien być nieprawidłowy:

<BusinessArea /> 

Dwa przykłady cię pokazany nie powinien być równoważny.

Sprawdź to dla zrozumienia xsi: nil i nillable:

http://www.zvon.org/xxl/XMLSchemaTutorial/Output/ser_over_st0.html

http://www.w3.org/TR/xmlschema-0/#Nils

+0

Hi YoK, dziękuję za odpowiedź. Myślę, że teraz rozumiem. Pls przeczytać moje aktualizacje na temat ciała pytania. –

+0

@darklydreamingcoder powinien generować nieprawidłowy dokument. Zaktualizowałem moją odpowiedź tym samym. – YoK

+0

Cześć YoK, dziękuję, widziałem twoją aktualizację. Teraz rozumiem doskonale. Zaktualizowałem moje pytanie z jeszcze jedną wątpliwością (o elementach innych niż zero). –

1
<a_element /> 

jest odpowiednikiem empty string i odda ważny przeciwko xsd: ciąg, ale nie przeciw typy takie jak xsd: date, xsd: datetime, xsd: decimal itp.

<a_element xsi:nil="true"/> 

jest equilalent z null i odda ważny dla wszystkich elementów, które mają nillable = „true” w schemacie rozdzielczości

Powiązane problemy