2011-09-14 9 views
86

Krótkie pytanieCzy jest rozróżniana wielkość liter XML?

Czy XML wielkość liter?

Dłuższy pytanie

Na przykład

<Shirt color="Red"/> 

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

Aby zweryfikować XML, użyłem następujące 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 spodziewać przyjmować różne odmiany przypadków czerwony, niebieski i zielony? Lub XML jest powszechnie akceptowany jako rozróżniana wielkość liter?

+3

Tak, jest. Jedna z pierwszych rzeczy, których dowiadujemy się o XML. – Oded

Odpowiedz

67

Krótka odpowiedź:

Tak - XML ​​jest wielkość liter.

Dłuższe Odpowiedź:

Jest on powszechnie akceptowany jako wielkość liter, jednak jeśli chcesz przyjąć bardziej elastycznie, przyjrzeć się poniższym pytaniu, które omawia mającego case-niewrażliwy wyliczeń:

XML Schema Case Insensitive Enumeration of Simple Type String

+5

Dłuższa odpowiedź: nic nie stoi na przeszkodzie, aby napisać aplikację XML, która jest nieistniejąca. Ale nie byłoby to oczekiwane ani zwyczajne. –

13

z XSD 1.1 można osiągnąć bez uwzględniania wielkości liter wyliczenie stosując twierdzenie:

<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 najnowszych wersjach Saxona i Xerces.

+0

Wystarczy pamiętać o korzystaniu z XSD 1.1, w chwili obecnej jest to tylko rekomendacja W3C - sprawdzanie poprawności Xerces z XSD 1.1 jest samodzielnym artefaktem w stanie beta, a XSD 1.1 nie jest obsługiwane przez JDK, nawet przez najnowszy 1.8. Nie jest to nawet planowane dla JDK 1.9, o ile wiem. W ten sposób nie można używać zaawansowanych technologii XML takich jak JAXB opartych na XSD 1.1 wbudowanych w JDK. –

+0

Tak, musisz zachować ostrożność, ale odpowiedź @ René wymaga kwalifikacji. Po pierwsze, "tylko rekomendacja W3C": cóż, podobnie jest z XSD 1.0. "Rekomendacja" jest tym, co W3C nazywa gotową, ostateczną, ratyfikowaną specyfikacją. Tak, to prawda, istnieją obecnie tylko trzy implementacje XSD 1.1 (Saxon, Xerces i Altova) i jest to czynnik, który należy wziąć pod uwagę. Ale nie daj się powstrzymać temu, co jest w JDK - JDK od dawna porzuciło wsparcie dla najnowszych standardów W3C (np. Nie obsługuje nawet XPath 2.0), ale jest mnóstwo bibliotek innych firm, aby wypełnić lukę. –

+0

Oczywiście zależy to od zastosowanej technologii. Jeśli zaimplementujesz niskopoziomowe parsowanie i kod, możesz użyć zewnętrznej biblioteki parserów (Xerces dla XSD 1.1 to wciąż wersja beta, istnieją dwa różne artefakty tej samej wersji Xerces!). Na przykład JAXB - @Michael: Czy znasz implementację JAXB innej firmy lub jej pochodną wykorzystującą XSD 1.1, generując w ten sposób klasy na przykład używając "alternatyw"? Tak czy owak, wybór zależy od jego potrzeb. –

Powiązane problemy