2010-09-21 49 views
21

Bạn có biết liệu có sự khác biệt giữa các thẻ này trên XML/XSD không?Sự khác nhau giữa <a_element /> và <a_element xsi: nil = "true" /> là gì?

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

ví dụ:

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

and 

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

Là những tương đương?

Nếu tôi có một yếu tố XSD:

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

điều này có nghĩa rằng đó là bởi xsi mặc định: nil = "false". Và điều này có nghĩa là nó sẽ không chấp nhận một giá trị null cho phần tử này.

Nghi ngờ của tôi là, liệu nó có chấp nhận điều này không?

<BusinessArea /> 

Điều này thực sự có ý nghĩa gì với XSD?

Trân trọng

+0

câu hỏi liên quan cho xml thay vì xsd: [gì i: nil = "true" nghĩa là gì? ] (http://stackoverflow.com/questions/463597/what-does-inil-true-mean) –

Trả lời

0

Sự hiểu biết của tôi là chúng không giống nhau. Ít nhất nếu bạn muốn xác thực xml dựa vào lược đồ. Nếu trong schema của bạn, bạn xác định các yếu tố như nillable, chúng ta hãy nói:

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

Bạn cần phải rõ ràng trong xml của bạn thiết lập yếu tố đó để null, như thế này:

<SomeName xsi:nill="true" /> 

Nếu trong xml của bạn phần tử giống như <SomeName /> nó sẽ không hợp lệ theo lược đồ.

+0

Câu hỏi không phải là nói về xsd: double nhưng về xsd: string. Chuỗi rỗng "" sẽ hiển thị không hợp lệ đối với xsd: double, nhưng sẽ hiển thị hợp lệ đối với xsd: string – Niek

3

XML Schema: Cấu trúc giới thiệu một cơ chế cho hệ thống báo rằng một yếu tố nên được chấp nhận như · hợp lệ · khi nó không có nội dung bất chấp một loại nội dung mà không yêu cầu hoặc thậm chí thiết cho phép nội dung trống rỗng. Phần tử có thể hợp lệ · không có nội dung nếu có thuộc tính xsi: không có giá trị đúng. Phần tử được gắn nhãn phải trống, nhưng có thể mang thuộc tính nếu được phép theo loại phức hợp tương ứng .

Nguồn: http://www.w3.org/TR/xmlschema-1/#xsi_nil

13

Bạn có được điều này như XSD BusinessArea của bạn nên được định nghĩa là nillable = "true". Một cái gì đó như:

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

Điều này có nghĩa là phần tử BusinessArea có thể có giá trị rỗng, tức là rỗng.

Và nếu phần tử trong XML không chứa bất kỳ giá trị sau đó nó phải có xsi thuộc tính: nil = "true":

<BusinessArea xsi:nil="true" /> 

này nên là không hợp lệ:

<BusinessArea /> 

Hai ví dụ bạn cho thấy không nên tương đương.

Kiểm tra này ra để hiểu xsi: nil và nillable:

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

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

+0

Xin chào YoK, cảm ơn bạn đã trả lời. Tôi nghĩ giờ tôi đã hiểu. Vui lòng đọc nội dung cập nhật của tôi về nội dung câu hỏi. –

+0

@darklydreamingcoder sẽ tạo tài liệu không hợp lệ. Cập nhật câu trả lời của tôi với nhau. – YoK

+0

Xin chào YoK, cảm ơn bạn, tôi đã nhìn thấy bản cập nhật của bạn. Bây giờ tôi hiểu hoàn toàn. Tôi đã cập nhật câu hỏi của mình thêm một chút nghi ngờ (về các phần tử không null) –

1
<a_element /> 

là tương đương với một empty string và sẽ làm cho hiệu lực chống lại xsd: string, nhưng không chống lại các loại như xsd: date, xsd: datetime, xsd: decimal etc.

<a_element xsi:nil="true"/> 

là equilalent của null và sẽ làm cho giá trị cho tất cả các yếu tố đó có nillable = "true" trong lược đồ nét

Các vấn đề liên quan