2012-08-01 38 views
6

Tôi muốn lưu trữ một số trong tệp XML có loại hoặc một loại số nguyên đơn giản khác, nhưng cho phép người dùng nhập số theo định dạng thập lục phân. Liệu tiêu chuẩn XML cho phép điều này vì tôi không thể tìm thấy bất cứ điều gì có liên quan?XML xs: int giá trị thập lục phân

Ví dụ, nếu XSD nói:

<xs:element name="value" type="xs:integer" use="required" /> 

sau đó tôi muốn XML để có thể nói:

<value>0xFF00FF</value> 

hoặc bất cứ ký hiệu cho hệ thập lục phân sẽ.

Rõ ràng là tôi có thể thử nó nhưng điều đó chỉ chứng minh sự hỗ trợ trong một triển khai cụ thể, không phải đó là tiêu chuẩn hay không. Tôi không đặc biệt quan tâm liệu việc lưu vào XML có mất cơ sở hay không.

Trả lời

4

Tôi không nghĩ vậy. xs:integer là một nguồn gốc/loại tập hợp con của xs:decimal, mà đại diện là defined as

thập phân có một đại diện từ vựng bao gồm một chuỗi hữu hạn độ dài của chữ số thập phân (# x30- # x39) cách nhau một khoảng thời gian như một chỉ số thập phân . Một dấu hiệu hàng đầu tùy chọn được cho phép. Nếu dấu hiệu bị bỏ qua, "+" được giả định. Các số 0 đầu và cuối là tùy chọn. Nếu phần phân số bằng không, thì có thể bỏ qua khoảng thời gian và sau (các) số không. Ví dụ: -1.23, 12678967.543233, +100000.00, 210.

Bạn có thể xóa 0x và đặt thành hexBinary, mặc dù bạn mất số lượng ngữ nghĩa.

2

XSD không cho phép điều này.

Nhưng XSD 1.1 không cho phép khía cạnh thực hiện xác định, bao gồm cả khía cạnh trước từ vựng, và Saxon khai thác tự do này để cung cấp các saxon: preprocess Facet mô tả ở đây:

http://www.saxonica.com/documentation/#!schema-processing/extensions11/preprocess

này sẽ cho phép bạn chấp nhận ký hiệu thập lục phân như một biểu diễn từ vựng của một kiểu số nguyên. Chỉ có nhược điểm (có thể là một lớn!) Là nó sẽ chỉ làm việc với Saxon.

4

Tôi đang sử dụng regular expression trong phần tử <xs:pattern>.

<xs:element name="value" use="required"> 
    <xs:simpleType> 
    <xs:restriction base="xs:string"> 
     <xs:pattern value="0x[0-9A-Fa-f]+|[0-9]+"/> 
    </xs:restriction> 
    </xs:simpleType> 
</xs:element> 

Điều này cho phép bạn lưu trữ cả hai chữ số thập phân và số thập lục phân (với bắt buộc 0x prefix). Tuy nhiên, bạn sẽ cần phải xử lý nó một cách cụ thể trong khi chuyển đổi chuỗi thành một số.

1

Tôi cần bản thân mình và bị thương ở đây.

Dưới đây là loại số nguyên không dấu 32 bit cho phép bạn nhập giá trị dưới dạng thập lục phân hoặc thập phân.

<xs:simpleType name="U32BitHexInt"> 
    <xs:union memberTypes="xs:unsignedInt"> 
    <xs:simpleType> 
     <xs:restriction base="xs:token"> 
     <xs:pattern value="0x[0-9A-Fa-f]{8}"/> 
     </xs:restriction> 
    </xs:simpleType> 
    </xs:union> 
</xs:simpleType> 
Các vấn đề liên quan