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 ที่ถูกต้องควรเหมือนนี้ (ตามโครงสร้างด้านบน):
<customer> <name>John Smith</name> </customer>
หรือเช่นนี้:
<kunde> <navn>John Smith</navn> </kunde>
ห้ามแทนที่สมาชิก
เพื่อป้องกันไม่ให้สมาชิกอื่นแทนที่สมาชิกที่กำหนดเอาไว้ ใช้คุณสมบัติ 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 ที่ถูกต้องควรเหมือนนี้ (ตามโครงสร้างด้านบน):
<customer> <name>John Smith</name> </customer>
แต่เอกสารด้านล่างนี้ไม่มีความถูกต้องตามนั้นอีกต่อไป:
<kunde> <navn>John Smith</navn> </kunde>
ใช้ substitutionGroup
ประเภทสมาชิกที่สามารถแทนที่ต้องเหมือนกับประเภทสมาชิกหลัก หรือมาจากประเภทสมาชิกหลักที่เกิดขึ้น หากประเภทสมาชิกที่สามารถแทนที่เหมือนกับประเภทสมาชิกหลัก คุณจึงไม่จำเป็นต้องกำหนดประเภทสมาชิกที่สามารถแทนที่
請注意,substitutionGroup 中的所有元素(主元素和可替換元素)必須被聲明為全局元素,否則就無法工作!
什麼是全局元素(Global Elements)?
全局元素指 "schema" 元素的直接子元素!本地元素(Local elements)指嵌套在其他元素中的元素。
- 上一頁 XSD <anyAttribute>
- 下一頁 XSD 實例