2013-03-18 38 views
8

Có phạm vi giá trị mặc định ngụ ý khi xác định phần tử của một kiểu dữ liệu cụ thể trong tệp XSD không? Ví dụ: nếu tôi xác định phần tử của loại số nguyên:XSD: phạm vi giá trị số nguyên mặc định

<xs:element name="MyIntegerElement" type="xs:integer"/> 

Điều này có giá trị tối thiểu và tối đa ngụ ý mà nó sẽ xác thực không? Tôi biết tôi có thể xác định một cách rõ ràng phạm vi hợp lệ như sau:

<xs:element name="MyIntegerElement"> 
    <xs:simpleType> 
     <xs:restriction base="xs:integer"> 
     <xs:minInclusive value="1"/> 
     <xs:maxInclusive value="16"/> 
     </xs:restriction> 
    </xs:simpleType> 
</xs:element> 

Nhưng nếu tôi không làm điều này khi tôi xác nhận một tập tin XML chống lại điều này nó sẽ mặc định một loạt các giá trị hợp lệ? Tôi đã đào bới trong tài liệu XSD nhưng chưa tìm thấy câu trả lời.

Trả lời

7

Vâng, nó phụ thuộc vào kiểu dữ liệu ...

Nếu bạn nhìn vào definition of integer at w3: không gian

Giá trị của số nguyên là tập hợp vô hạn {..., - 2, - 1,0,1,2, ...}

Về bản chất, có nghĩa là, đối với số nguyên, theo mặc định không có phạm vi giá trị tối thiểu/tối đa vì bất kỳ số nguyên nào có thể được biểu diễn.

Mặt khác, for an int:

(...) maxInclusive là 2147483647 và minInclusive là -2147483648.

Danh sách đi cho longs, shorts, vv ...

Bạn có thể đọc nó một cách chi tiết hơn ở đây: http://www.w3.org/TR/xmlschema-2/#typesystem

+0

Có, nhưng vào thời điểm mà bạn đang xác định một cách rõ ràng trong phạm vi giá trị sử dụng maxInclusive và minInclusive. Nếu tôi không xác định rõ ràng phạm vi bằng cách sử dụng những gì phạm vi hợp lệ của các yếu tố của loại nguyên là? Vì vậy, nếu tôi có một phần tử như được định nghĩa và tôi tạo một tệp XML với 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 Liệu nó có hợp lệ với XSD không? – Jeff

+1

Đó là một 'số nguyên' hoàn toàn hợp lệ (xs: số nguyên), vì vậy nếu bạn xác thực nó với lược đồ, nó sẽ nói rằng nó là ok. Bây giờ, nếu bạn muốn nó vừa với 32 bit, bạn có thể muốn sử dụng xs: int, trong trường hợp đó lược đồ sẽ nói rằng giá trị cụ thể đó quá lớn để vừa. Tất cả đều tóm tắt những gì chính xác là bạn đang cố gắng để đại diện với dữ liệu của bạn. Số xs: integer VS xs: int là một điểm khởi đầu tốt đẹp để hiểu sự khác biệt giữa biểu diễn dữ liệu. Có một bài đăng hay ở đây: http://stackoverflow.com/questions/15336872/xsd-what-is-the-difference-between-xsinteger-and-xsint –

+0

Cảm ơn. Tôi nghĩ bạn đã trả lời câu hỏi của tôi ở đó. Ý định của tôi là có các kiểu dữ liệu này bị ràng buộc theo mặc định có liên quan đến nền tảng chúng được sử dụng nhưng có vẻ như trong trường hợp này int là thứ tôi muốn sử dụng hơn là số nguyên dường như vô biên. Tôi vẫn có thể sử dụng số nguyên nhưng tôi sẽ phải xác định rõ ràng các giới hạn nhưng sau đó nó vẫn sẽ không nhất thiết phải là nền tảng chéo. – Jeff

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