XML Schema:为什么不能有孩子?这怎么可以绕过?
发布时间:2020-12-16 08:01:25 所属栏目:百科 来源:网络整理
导读:我正在尝试为 property创建一个模式元素必须具有 key子元素, val shell中的一个或 perl和可选的 os或条件,并且子元素的顺序并不重要。 以下是有效 property的一些示例。内容: property keyA/key valb/val/propertyproperty keyA/key valb/val osWindows/o
我正在尝试为< property>创建一个模式元素必须具有< key>子元素,< val>< shell>中的一个或< perl>和可选的< os>或<条件>,并且子元素的顺序并不重要。
以下是有效< property>的一些示例。内容: <property> <key>A</key> <val>b</val> </property> <property> <key>A</key> <val>b</val> <os>Windows</os> </property> <property> <condition>a == 1</condition> <key>A</key> <perl>1+1</perl> <os>unix</os> </property> 理想情况下,我想到使用< xs:all>为了这: <xs:element name="property"> <xs:complexType> <xs:all> <xs:element name="key" type="xs:string" /> <xs:choice> <xs:element name="val" type="xs:string" /> <xs:element name="perl" type="xs:string" /> <xs:element name="shell" type="xs:string" /> </xs:choice> <xs:element name="os" type="xs:string" minOccurs="0" /> <xs:element name="condition" type="xs:string" minOccurs="0" /> </xs:all> </xs:complexType> </xs:element> 但是我发现,< xs:all>只能包含< xs:element>而不是< xs:choice> ;.有人可以解释为什么吗? 更重要的是,有人可以提供一种方法来验证这样的<属性>元件? 我可以把三个元素 – < val>< perl>和<壳> – 作为< xs:all>中的可选元素,但是我希望模式验证该元素中只有一个存在于该元素中。这可以做吗
我认为这是一个更好的,因为“选择”现在是自己的元素(typeFacet),但不能直接使用它是抽象的。
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="property"> <xs:complexType> <xs:all> <xs:element name="key" type="xs:string" /> <xs:element ref="typeFacet" /> <xs:element name="os" type="xs:string" minOccurs="0" /> <xs:element name="condition" type="xs:string" minOccurs="0" /> </xs:all> </xs:complexType> </xs:element> <xs:element name="typeFacet" abstract="true" /> <xs:element name="val" type="xs:string" substitutionGroup="typeFacet" /> <xs:element name="perl" type="xs:string" substitutionGroup="typeFacet" /> <xs:element name="shell" type="xs:string" substitutionGroup="typeFacet" /> </xs:schema> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |