Czy w XML jest rozróżniana wielkość liter?

109

Krótkie pytanie

Czy w XML jest rozróżniana wielkość liter?

Dłuższe pytanie

Na przykład:

<Shirt color="Red"/>

Kolor atrybutów jest typu string, który może zawierać szereg ważnych kolorów ( Red, Bluei Green).

Aby sprawdzić poprawność XML, użyłem następującego XSD:

  <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 I oczekiwać , aby zaakceptować różne odmiany przypadków czerwony, niebieski i zielony? Czy XML jest powszechnie akceptowany jako rozróżnianie wielkości liter?

Ian
źródło
4
Tak to jest. Jedna z pierwszych rzeczy, których można się nauczyć o XML-u.
Oded

Odpowiedzi:

81

Krótka odpowiedź:

Tak - XML ​​rozróżnia wielkość liter.

Dłuższa odpowiedź:

Powszechnie przyjmuje się, że wielkość liter ma znaczenie, jednak jeśli chcesz zaakceptować bardziej elastycznie, spójrz na poniższe pytanie, które omawia wyliczenia bez rozróżniania wielkości liter:

Wyliczenie prostego ciągu typu bez rozróżniania wielkości liter w schemacie XML

Jon Egerton
źródło
6
Dłuższa odpowiedź: nic nie stoi na przeszkodzie, abyś napisał aplikację XML, która nie uwzględnia wielkości liter. Ale nie można się tego spodziewać ani zwyczajnie.
Matthew Wilson,
17

W XSD 1.1 można uzyskać wyliczenie bez uwzględniania wielkości liter przy użyciu asercji:

<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 jest obsługiwany w ostatnich wersjach Saxon i Xerces.

Michael Kay
źródło
Po prostu pamiętaj o używaniu XSD 1.1, w chwili obecnej jest to tylko zalecenie W3C - Xerces z weryfikacją XSD 1.1 jest samodzielnym artefaktem w stanie beta, a XSD 1.1 nie jest obsługiwany przez JDK, nawet najnowszy 1.8 . O ile wiem, nie jest to nawet planowane dla JDK 1.9. Nie można w ten sposób korzystać z zaawansowanych technologii XML, takich jak JAXB opartego na XSD 1.1 wbudowanym w JDK.
René
Tak, musisz być ostrożny, ale odpowiedź @ René wymaga kwalifikacji. Po pierwsze, „tylko zalecenie W3C”: no cóż, tak samo jest z XSD 1.0. „Rekomendacja” jest tym, co W3C nazywa skończoną, ostateczną, ratyfikowaną specyfikacją. Tak, to prawda, że ​​obecnie istnieją tylko trzy implementacje XSD 1.1 (Saxon, Xerces i Altova) i jest to czynnik, który należy wziąć pod uwagę. Ale nie powstrzymuj się przed tym, co jest w JDK - JDK już dawno porzucił wsparcie dla najnowszych standardów W3C (np. Nie obsługuje nawet XPath 2.0), ale istnieje wiele bibliotek innych firm, które wypełniają tę lukę.
Michael Kay
Oczywiście zależy to od zastosowanej technologii. Jeśli zaimplementujesz niskopoziomowe analizowanie i kod, możesz użyć biblioteki parsera innej firmy (Xerces dla XSD 1.1 jest nadal w wersji beta, istnieją dwa różne artefakty tej samej wersji Xerces!). Na przykład JAXB - @Michael: Czy znasz implementację JAXB innej firmy lub wyprowadzasz, korzystając z XSD 1.1, generując w ten sposób klasy, na przykład przy użyciu „alternatyw”? W każdym razie Ian powinien wybrać w zależności od jego potrzeb.
René