用于递归元素定义的 XSD [英] XSD for recursive element definition
本文介绍了用于递归元素定义的 XSD的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个案例,我需要一个元素来嵌套自己或拥有其他元素.
这样的事情应该是有效的:
Something like this should be valid:
<root>
<rule condition="...">
<rule condition="...">
<setting>...</setting>
</rule>
</rule>
<rule condition="...">
<setting>...</setting>
</rule>
</root>
但这应该不是有效的:
<root>
<rule condition="...">
<rule condition="...">
<setting>...</setting>
</rule>
<setting>...</setting>
<setting>...</setting>
</rule>
</root>
如果我正确理解 XSD,这应该可以完成工作,但事实并非如此.我做错了什么?
If I understand XSD correctly this should do the job but it doesn't. What am I doing wrong?
<xs:complexType name="RuleType">
<xs:choice>
<xs:element name="rule" minOccurs="1"
maxOccurs="unbounded" type="RuleType" />
<xs:element name="setting" minOccurs="1"
maxOccurs="unbounded" type="xs:string" />
</xs:choice>
<xs:attribute name="condition" type="xs:string" use="required"/>
</xs:complexType>
推荐答案
此 XSD 将允许您的第一个示例 XML 但不允许您的第二个示例:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="rule" type="RuleType"/>
<xs:complexType name="RuleType">
<xs:choice>
<xs:element name="setting" minOccurs="1" maxOccurs="unbounded" />
<xs:element ref="rule" minOccurs="1" maxOccurs="unbounded" />
</xs:choice>
<xs:attribute name="condition" use="required"/>
</xs:complexType>
</xs:schema>
像这样读取 XSD: 每个 rule
可以包含一个或多个 setting
元素或一个或多个其他 rule
元素(递归).
Read the XSD like this: Each rule
can consist of either one or more setting
elements or one or more other rule
elements (recursively).
这篇关于用于递归元素定义的 XSD的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文