XML có phân biệt chữ hoa chữ thường không?


109

Câu hỏi ngắn

XML có phân biệt chữ hoa chữ thường không?

Câu hỏi dài hơn

Ví dụ:

<Shirt color="Red"/>

Màu thuộc tính là loại stringcó thể chứa một tập hợp các màu sắc hợp lệ ( Red, BlueGreen).

Để xác thực XML, tôi đã sử dụng XSD sau:

  <xs:simpleType name="ColorType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Red"/>
      <xs:enumeration value="Blue"/>
      <xs:enumeration value="Green"/>
    </xs:restriction>
  </xs:simpleType>

Am tôi mong đợi để chấp nhận sự thay đổi trường hợp khác nhau của Red, Blue và Green? Hay XML được chấp nhận rộng rãi là phân biệt chữ hoa chữ thường?


4
Vâng, đúng vậy. Một trong những điều đầu tiên người ta học về XML.
Nhập

Câu trả lời:


81

Câu trả lời ngắn:

Có - XML ​​phân biệt chữ hoa chữ thường.

Câu trả lời dài hơn:

Nó được chấp nhận rộng rãi là phân biệt chữ hoa chữ thường, tuy nhiên nếu bạn muốn chấp nhận một cách linh hoạt hơn, hãy xem câu hỏi dưới đây, thảo luận về việc liệt kê không phân biệt chữ hoa chữ thường:

Lược đồ XML liệt kê không phân biệt chữ hoa chữ thường của chuỗi loại đơn giản


6
Câu trả lời dài hơn: không có gì ngăn cản bạn viết một ứng dụng XML không phân biệt chữ hoa chữ thường. Nhưng nó sẽ không được mong đợi hoặc bình thường.
Matthew Wilson

17

Với XSD 1.1, bạn có thể đạt được kiểu liệt kê không phân biệt chữ hoa chữ thường bằng cách sử dụng khẳng định:

<xs:simpleType name="RGB">
  <xs:restriction base="xs:string">
    <xs:assert test="lower-case($value) = ('red', 'green', 'blue')"/>
  </xs:restriction>
</xs:simpleType>

XSD 1.1 được hỗ trợ trong các bản phát hành gần đây của Saxon và Xerces.


Chỉ cần lưu ý về việc sử dụng XSD 1.1, tại thời điểm hiện tại, nó chỉ là khuyến nghị của W3C - Xerces với xác nhận XSD 1.1 là một tạo tác độc lập ở trạng thái beta và XSD 1.1 không được hỗ trợ bởi JDK, thậm chí không phải bởi phiên bản mới nhất 1.8 . Nó thậm chí không được lên kế hoạch cho JDK 1.9 theo như tôi biết. Bạn không thể sử dụng các công nghệ XML nâng cao như JAXB dựa trên XSD 1.1 được tích hợp sẵn từ JDK theo cách này.
René

Có, bạn cần phải thận trọng, nhưng câu trả lời của @ René cần trình độ. Thứ nhất, "chỉ là khuyến nghị của W3C": tốt, XSD 1.0 cũng vậy. "Đề xuất" là cái mà W3C gọi là thông số kỹ thuật đã hoàn thành, cuối cùng, được phê duyệt. Có, đúng là hiện tại chỉ có ba cách triển khai XSD 1.1 (Saxon, Xerces và Altova) và đây là một yếu tố bạn nên tính đến. Nhưng đừng bị kìm hãm bởi những gì có trong JDK - JDK từ lâu đã bỏ hỗ trợ cho các tiêu chuẩn W3C mới nhất (ví dụ nó thậm chí không hỗ trợ XPath 2.0) nhưng có rất nhiều thư viện của bên thứ ba để lấp đầy khoảng trống.
Michael Kay

Tất nhiên nó phụ thuộc vào công nghệ được sử dụng. Nếu bạn triển khai phân tích cú pháp cấp thấp và mã, bạn có thể sử dụng thư viện trình phân tích cú pháp của bên thứ ba (Xerces cho XSD 1.1 vẫn là phiên bản beta, có hai tạo tác khác nhau của cùng một phiên bản Xerces!). Ví dụ về JAXB - @Michael: Bạn có biết cách triển khai JAXB của bên thứ 3 hoặc tạo ra việc sử dụng XSD 1.1, do đó, tạo các lớp chẳng hạn bằng cách sử dụng "các lựa chọn thay thế"? Dù sao đi nữa, đó là do Ian lựa chọn tùy theo nhu cầu của mình.
René,
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.