การแทนที่องค์ประกอบ XSD (Element Substitution)
- หน้าก่อน XSD <anyAttribute>
- หน้าต่อไป ตัวอย่าง XSD
透過 XML Schema,一個要素可對另一個要素進行置換。
要素置換
ให้เราชี้แนะด้วยตัวอย่าง: ผู้ใช้ของเรามาจากสหราชอาณาจักรและนอร์เวย์ รายละเอียดของเราต้องการสามารถเลือกในการใช้ชื่อองค์ประกอบด้วยภาษานอร์เวย์หรือภาษาอังกฤษในเอกสาร XML
เพื่อแก้ปัญหานี้ เราสามารถประกาศใน XML schema ได้ substitutionGroupเบื้องต้น เราประกาศองค์ประกอบหลัก หลังจากนั้นเราจะประกาศองค์ประกอบรอง ซึ่งองค์ประกอบรองสามารถประกาศได้ว่าเราสามารถทดแทนองค์ประกอบหลักได้
<xs:element name="name" type="xs:string"/> <xs:element name="navn" substitutionGroup="name"/>
ในตัวอย่างที่ข้างต้น "name" องค์ประกอบเป็นองค์ประกอบหลัก และองค์ประกอบ "navn" สามารถทดแทนองค์ประกอบ "name" ได้
ดูส่วนหนึ่งของ XML schema ต่อไปนี้:
<xs:element name="name" type="xs:string"/> <xs:element name="navn" substitutionGroup="name"/> <xs:complexType name="custinfo"> <xs:sequence> <xs:element ref="name"/> </xs:sequence> </xs:complexType> <xs:element name="customer" type="custinfo"/> <xs:element name="kunde" substitutionGroup="customer"/>
เอกสาร XML ที่ถูกต้องมีลักษณะเช่นนี้ (ตาม schema ที่ข้างต้น):
<customer> <name>John Smith</name> </customer>
หรือเช่นนี้ด้วย:
<kunde> <navn>John Smith</navn> </kunde>
ป้องกันการทดแทนองค์ประกอบ
เพื่อป้องกันอื่นๆ จะทดแทนองค์ประกอบที่ระบุเป็นไปด้วย attribute ชื่อ block:
<xs:element name="name" type="xs:string" block="substitution"/>
ดูส่วนหนึ่งของ XML schema ต่อไปนี้:
<xs:element name="name" type="xs:string" block="substitution"/> <xs:element name="navn" substitutionGroup="name"/> <xs:complexType name="custinfo"> <xs:sequence> <xs:element ref="name"/> </xs:sequence> </xs:complexType> <xs:element name="customer" type="custinfo" block="substitution"/> <xs:element name="kunde" substitutionGroup="customer"/>
เอกสาร XML ที่ถูกต้องตามมาตราฐานดังนี้ (ตาม schema ที่ข้างต้น):
<customer> <name>John Smith</name> </customer>
แต่เอกสารด้านล่างนี้ไม่ได้รับอนุญาตอีกต่อไป:
<kunde> <navn>John Smith</navn> </kunde>
การใช้ substitutionGroup
ประเภทขององค์ประกอบที่สามารถแทนที่ต้องเหมือนกันกับประเภทขององค์ประกอบหลัก หรือมีต้นกำเนิดมาจากองค์ประกอบหลัก หากประเภทขององค์ประกอบที่สามารถแทนที่เหมือนกันกับประเภทขององค์ประกอบหลัก คุณจึงไม่จำเป็นต้องกำหนดประเภทขององค์ประกอบที่สามารถแทนที่
โปรดทราบว่า ทุกองค์ประกอบใน substitutionGroup ต้องถูกประกาศเป็นองค์ประกอบโลก ไม่เช่นนั้น จะไม่สามารถทำงานได้!
องค์ประกอบโลกหมายถึงอะไร?
องค์ประกอบโลกหมายถึงรายการที่เป็นลูกขององค์ประกอบ "schema" องค์ประกอบท้องถิ่น (Local elements) หมายถึงองค์ประกอบที่ฝังอยู่ในองค์ประกอบอื่น
- หน้าก่อน XSD <anyAttribute>
- หน้าต่อไป ตัวอย่าง XSD