[英]XSD: Child's name is the name of parent's attribute
是否可以驗證以下XML,其中父級的子級名稱是其屬性“名稱”:
<root>
<parent name="foo">
<foo/>
</parent>
<parent name="bar">
<bar/>
</parent>
<parent name="abc">
<xyz/> <!-- invalid -->
</parent>
</root>
XSD,根據要求:
<xsd:schema elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:complexType name="parentType">
<xsd:sequence>
<!-- TODO: enforce element name same as it's parent's attribute "name" -->
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
<xsd:element name="root">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="parent" type="parentType"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
“ TODO”是我的絆腳石。 在此先感謝您的幫助!
在XSD 1.0中 ,您不能直接指定這樣的約束,但是可以使用Schematron指定它或在應用程序級別檢查它。
在XSD 1.1中 ,您可以使用xsd:assert
:
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema elementFormDefault="qualified"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:complexType name="parentType">
<xsd:sequence>
<xsd:any processContents="lax" minOccurs="1" maxOccurs="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
<xsd:assert test="@name = local-name(*[1])"/>
</xsd:complexType>
<xsd:element name="root">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="parent" type="parentType" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
這是在查看違反XML規則“不要重復自己”時會出問題的練習嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.