XML ตรงตามตัวพิมพ์ใหญ่ - เล็กหรือไม่


109

คำถามสั้น ๆ

XML ตรงตามตัวพิมพ์ใหญ่ - เล็กหรือไม่

คำถามอีกต่อไป

ตัวอย่างเช่น:

<Shirt color="Red"/>

สีแอตทริบิวต์เป็นประเภทstringที่อาจมีชุดสีที่ถูกต้อง ( Red, BlueและGreen)

ในการตรวจสอบ XML ฉันใช้ 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>

ฉันคาดว่าจะยอมรับกรณีที่แตกต่างกันของสีแดงสีน้ำเงินและสีเขียวหรือไม่ หรือ XML ได้รับการยอมรับอย่างกว้างขวางว่าคำนึงถึงตัวพิมพ์เล็กและใหญ่?


4
ใช่แล้ว. สิ่งแรกที่เราเรียนรู้เกี่ยวกับ XML
Oded

คำตอบ:


81

คำตอบสั้น ๆ :

ใช่ - XML ​​คำนึงถึงขนาดตัวพิมพ์

คำตอบอีกต่อไป:

เป็นที่ยอมรับอย่างกว้างขวางว่าคำนึงถึงตัวพิมพ์เล็กและใหญ่อย่างไรก็ตามหากคุณต้องการยอมรับอย่างยืดหยุ่นมากขึ้นลองดูคำถามด้านล่างซึ่งกล่าวถึงการแจงนับแบบไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่:

XML Schema Case Insensitive Enumeration ของ Simple Type String


6
คำตอบที่ยาวขึ้น: ไม่มีอะไรที่จะหยุดคุณเขียนแอปพลิเคชัน XML ซึ่งเป็นกรณีที่ไม่เข้าใจ แต่มันจะไม่คาดหวังหรือเป็นปกติ
Matthew Wilson

17

ด้วย XSD 1.1 คุณสามารถบรรลุการแจงนับแบบไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่โดยใช้การยืนยัน:

<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 ได้รับการสนับสนุนใน Saxon และ Xerces รุ่นล่าสุด


โปรดทราบว่าการใช้ XSD 1.1 ในขณะนี้เป็นเพียงคำแนะนำ W3C เท่านั้น - Xerces ที่มีการตรวจสอบ XSD 1.1 เป็นสิ่งประดิษฐ์แบบสแตนด์อโลนในสถานะเบต้าและ XSD 1.1 ไม่ได้รับการสนับสนุนโดย JDK แม้กระทั่งล่าสุด 1.8 . มันไม่ได้วางแผนไว้สำหรับ JDK 1.9 เท่าที่ฉันรู้ คุณไม่สามารถใช้เทคโนโลยี XML ขั้นสูงเช่น JAXB ที่ใช้ XSD 1.1 ในตัวจาก JDK ด้วยวิธีนี้
René

ใช่คุณต้องระมัดระวัง แต่คำตอบของ @ Renéต้องมีคุณสมบัติ ประการแรก "เป็นเพียงคำแนะนำ W3C" นั่นคือ XSD 1.0 "คำแนะนำ" คือสิ่งที่ W3C เรียกข้อกำหนดที่เสร็จสิ้นขั้นสุดท้ายและให้สัตยาบัน ใช่มีการใช้งาน XSD 1.1 เพียงสามครั้งในปัจจุบัน (Saxon, Xerces และ Altova) และนี่เป็นปัจจัยที่คุณควรคำนึงถึง แต่อย่าลังเลกับสิ่งที่อยู่ใน JDK - JDK ได้ละทิ้งการสนับสนุนมาตรฐาน W3C ล่าสุดมานานแล้ว (เช่นไม่รองรับ XPath 2.0) แต่มีไลบรารีของบุคคลที่สามมากมายที่จะเติมเต็มช่องว่าง
Michael Kay

แน่นอนว่าขึ้นอยู่กับเทคโนโลยีที่ใช้ หากคุณใช้การแยกวิเคราะห์และโค้ดระดับต่ำคุณสามารถใช้ไลบรารีตัวแยกวิเคราะห์ของบุคคลที่สามได้ (Xerces สำหรับ XSD 1.1 ยังคงเป็นรุ่นเบต้ามีสิ่งประดิษฐ์ที่แตกต่างกันสองรายการในเวอร์ชัน Xerces เดียวกัน!) สำหรับตัวอย่างของ JAXB - @Michael: คุณรู้จักการใช้งาน JAXB ของบุคคลที่สามหรือการใช้งาน XSD 1.1 หรือไม่ดังนั้นการสร้างคลาสเช่นการใช้ "ทางเลือก" อย่างไรก็ตามมันอยู่ที่เอียนที่จะเลือกขึ้นอยู่กับความต้องการของเขา
René
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.