XSD 限定 / Facets

จำกัด (restriction) ใช้เพื่อกำหนดค่าที่ยอมรับขององค์ประกอบ XML หรือแบบระบุ จำกัดขององค์ประกอบ XML รับชื่อว่า facet.

จำกัดค่าของค่า

ตัวอย่างต่อไปนี้ก็ได้เขียนคำอธิบายสำหรับองค์ประกอบที่มีชื่อ "age" ที่มีความหมายที่กำหนด ค่าของ age ไม่สามารถต่ำกว่า 0 หรือสูงกว่า 120:

<xs:element name="age">
<xs:simpleType>
  <xs:restriction base="xs:integer">
    <xs:minInclusive value="0"/>
    <xs:maxInclusive value="120"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

จำกัดค่าของกลุ่มค่า

ถ้าต้องการจำกัดเนื้อหาขององค์ประกอบ XML ให้เป็นกลุ่มค่าที่ยอมรับ ต้องการใช้กำหนดแบบระบุ (enumeration constraint):

ตัวอย่างต่อไปนี้ก็ได้เขียนคำอธิบายสำหรับองค์ประกอบที่มีชื่อ "car" ที่มีความหมายที่กำหนด ค่าที่ยอมรับเพียง Audi, Golf, BMW:

<xs:element name="car">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:enumeration value="Audi"/>
    <xs:enumeration value="Golf"/>
    <xs:enumeration value="BMW"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

ตัวอย่างดังกล่าวก็สามารถเขียนได้เช่นนี้:

<xs:element name="car"> type="carType"/>
<xs:simpleType name="carType">
  <xs:restriction base="xs:string">
    <xs:enumeration value="Audi"/>
    <xs:enumeration value="Golf"/>
    <xs:enumeration value="BMW"/>
  </xs:restriction>
</xs:simpleType>

หมายเหตุ:ในกรณีนี้ ชนิด "carType" สามารถถูกใช้โดยองค์ประกอบอื่น เพราะมันไม่ใช่ส่วนประกอบขององค์ประกอบ "car":

จำกัดค่าของลำดับของค่า

ถ้าต้องการจำกัดเนื้อหาขององค์ประกอบ XML ให้เป็นลำดับของตัวเลขหรือตัวอักษรที่สามารถใช้ได้ ต้องการใช้กำหนดโมเดิล (pattern constraint):

ตัวอย่างต่อไปนี้ก็ได้เขียนคำอธิบายสำหรับองค์ประกอบที่มีชื่อ "letter" ที่มีความหมายที่กำหนด ค่าที่ยอมรับเพียงตัวอักษรเล็ก a - z หนึ่งตัว:

<xs:element name="letter">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="[a-z]"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

ตัวอย่างต่อไปนี้ก็ได้เขียนคำอธิบายสำหรับองค์ประกอบที่มีชื่อ "initials" ที่มีความหมายที่กำหนด ค่าที่ยอมรับคือตัวอักษรใหญ่ A - Z สามตัว:

<xs:element name="initials">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="[A-Z][A-Z][A-Z]"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

ตัวอย่างต่อไปนี้ก็ได้เขียนคำอธิบายสำหรับองค์ประกอบที่มีชื่อ "initials" ที่มีความหมายที่กำหนด ค่าที่ยอมรับคือตัวอักษรใหญ่หรือตัวอักษรเล็กของ a - z สามตัว:

<xs:element name="initials">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="[a-zA-Z][a-zA-Z][a-zA-Z]"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

ตัวอย่างดังกล่าวนี้กำหนดสมบัติ ที่มีชื่อว่า "choice" ซึ่งมีค่าที่ยอมรับเป็นตัวอักษร x, y หรือ z หนึ่งตัว:

<xs:element name="choice">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="[xyz]"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

ตัวอย่างดังกล่าวนี้กำหนดสมบัติ ที่มีชื่อว่า "prodid" ซึ่งมีค่าที่ยอมรับเป็นลำดับห้าตัวเลขอาหรับ ซึ่งแต่ละตัวเลขอาจเป็นตัวเลข 0-9:

<xs:element name="prodid">
<xs:simpleType>
  <xs:restriction base="xs:integer">
    <xs:pattern value="[0-9][0-9][0-9][0-9][0-9]"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

ข้อกำหนดอื่นๆ สำหรับชุดค่าต่างๆ

ตัวอย่างดังกล่าวนี้กำหนดสมบัติ ที่มีชื่อว่า "letter" ซึ่งมีค่าที่ยอมรับเป็นตัวอักษรจาก a - z ซึ่งอาจเป็นตัวอักษรหนึ่งหรือหลายตัว:

<xs:element name="letter">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="([a-z])*"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

ตัวอย่างดังกล่าวนี้กำหนดสมบัติ ที่มีชื่อว่า "letter" ซึ่งมีค่าที่ยอมรับเป็นตัวอักษรหนึ่งต่อหนึ่งหรือหลายตัวอักษร ซึ่งแต่ละตัวอักษรเป็นตัวอักษรเล็กหลังจากตัวอักษรใหญ่ ตัวอย่างเช่น "sToP" จะผ่านการตรวจสอบโดยรูปแบบนี้ แต่ "Stop"、"STOP" หรือ "stop" จะไม่ผ่านการตรวจสอบ:

<xs:element name="letter">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="([a-z][A-Z])+"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

ตัวอย่างดังกล่าวนี้กำหนดสมบัติ ที่มีชื่อว่า "gender" ซึ่งมีค่าที่ยอมรับเป็นค่าที่เรียกว่า male หรือ female:

<xs:element name="gender">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="male|female"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

ตัวอย่างดังกล่าวนี้กำหนดสมบัติ ที่มีชื่อว่า "password" ซึ่งมีค่าที่ยอมรับเป็นค่าของแถวตัวอักษร 8 ตัว ซึ่งต้องเป็นตัวอักษรใหญ่หรือตัวอักษรเล็ก a - z หรือตัวเลข 0 - 9:

<xs:element name="password">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="[a-zA-Z0-9]{8}"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

ข้อกำหนดอักขระว่าง

เพื่อกำหนดวิธีการประมวลผลอักขระว่าง (whitespace characters) จะต้องใช้ข้อกำหนด "whiteSpace":

ตัวอย่างดังกล่าวนี้กำหนดสมบัติ ที่มีชื่อว่า "address" ที่มีการกำหนดข้อกำหนด "whiteSpace" ซึ่งกำหนดให้ "preserve" ซึ่งหมายความว่า XML ประมวลผลจะไม่ลบอักขระว่างใดๆ:

<xs:element name="address">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:whiteSpace value="preserve"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

ตัวอย่างนี้ก็ได้กำหนดองค์ประกอบที่มีชื่อว่า "address" ที่มีข้อจำกัด ค่า whiteSpace ของมันถูกตั้งเป็น "replace" ซึ่งหมายความว่า XML processor จะลบรวมทั้งหมดของตัวอักษรว่าง (รวมถึงวงจรรอบสาระ ออกเรียก อักษรเปล่า และตารางที่วาง)

<xs:element name="address">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:whiteSpace value="replace"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

ตัวอย่างนี้ก็ได้กำหนดองค์ประกอบที่มีชื่อว่า "address" ที่มีข้อจำกัด ค่า whiteSpace ของมันถูกตั้งเป็น "collapse" ซึ่งหมายความว่า XML processor จะลบรวมทั้งหมดของตัวอักษรว่าง (รวมถึงวงจรรอบสาระ ออกเรียก อักษรเปล่า และตารางที่วาง จะถูกแทนที่ด้วยอักษรเปล่า ตัวอักษรเปล่าที่อยู่ท้ายต้นจะถูกลบ และอักษรเปล่าที่มีจำนวนมากกว่าหนึ่งตัวจะถูกขยายเป็นอักษรเปล่าเดียว)

<xs:element name="address">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:whiteSpace value="collapse"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

จำกัดความยาว

เพื่อจำกัดความยาวของค่าในองค์ประกอบ เราต้องใช้ข้อจำกัด length, maxLength และ minLength

ตัวอย่างนี้กำหนดองค์ประกอบที่มีชื่อว่า "password" ที่มีข้อจำกัด ค่าของมันควรมีความยาวที่เหมาะสมทั้งหมด 8 อักษร

<xs:element name="password">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:length value="8"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

ตัวอย่างนี้ก็ได้กำหนดองค์ประกอบที่มีชื่อว่า "password" ที่มีข้อจำกัด ค่าของมันควรมีความยาวตั้งแต่ 5 อักษรถึง 8 อักษร

<xs:element name="password">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:minLength value="5"/>
    <xs:maxLength value="8"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

จำกัดของประเภทข้อมูล

จำกัด คำอธิบาย
enumeration กำหนดรายการค่าที่ยอมรับ
fractionDigits กำหนดจำนวนที่สูงสุดของตัวเลขที่ยอมรับ ต้องมากกว่าหรือเท่ากับ 0
length กำหนดจำนวนที่ยอมรับของตัวอักษรหรือรายการสินค้าที่ยอมรับ ต้องมากกว่าหรือเท่ากับ 0
maxExclusive กำหนดขอบเขตสูงสุดของตัวเลข ค่าที่อนุญาตควรต่ำกว่าค่านี้
maxInclusive กำหนดขอบเขตสูงของตัวเลข ค่าที่ยอมรับจะต้องต่ำกว่าหรือเท่ากับค่านี้
maxLength กำหนดจำนวนของอักษรหรือรายการที่ยอมรับแบบใหญ่ที่สุด จะต้องมากกว่าหรือเท่า 0
minExclusive กำหนดขอบเขตต่ำของตัวเลข ค่าที่ยอมรับจะต้องมากกว่าค่านี้
minInclusive กำหนดขอบเขตต่ำของตัวเลข ค่าที่ยอมรับจะต้องมากกว่าหรือเท่ากับค่านี้
minLength กำหนดจำนวนของอักษรหรือรายการที่ยอมรับแบบเล็กที่สุด จะต้องมากกว่าหรือเท่า 0
pattern กำหนดลำดับที่ยอมรับของอักษรที่ยอมรับ
totalDigits กำหนดจำนวนที่แน่นอนของตัวเลขอาหรับที่ยอมรับ จะต้องมากกว่า 0
whiteSpace กำหนดวิธีการประมวลผลของอักษรช่องว่าง (แบบเรียบเรียง ช่องว่าง ช่องติด และช่องตั้ง)