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?


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


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.


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é
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.