如何为递归和未知命名元素定义 XML 模式?
How to define an XML Schema for recursive and unknown-named elements?
是否可以为递归的未知命名元素定义 XML 架构?
例如:
<Bob age="72">
<FavoriteColor>"Blue"</FavoriteColor>
<Children>
<Sally age="36">
<FavoriteColor>"Green"</FavoriteColor>
<Children />
</Sally>
<Joe age="34">
<FavoriteColor>"Red"</FavoriteColor>
<Children>
<Tina age="5">
<FavoriteColor>"Blue"</FavoriteColor>
<Children />
</Tina>
<Frank age="6">
<FavoriteColor>"Yellow"</FavoriteColor>
<Children />
</Frank>
</Children>
</Joe>
</Children>
</Bob>
我是 XSD 的新手,但我认为这需要递归和 <xs:any>
.
的某种组合
见:
Recursion in an XML schema? 和
how can I define an xsd file that allows unknown (wildcard) elements?
但是我找不到不涉及用更严格的形式重写我的隐含 Person
元素的解决方案:
<Person name="Bob" age="72">
<FavoriteColor />
<Children />
原始 XML 架构可用吗?
您已正确识别 xsd:any
作为允许 Children
下的任何元素的解决方案,并且您已正确识别表示类家谱结构的递归类型模式。
然而,xsd:any
不能胜任对其管辖的元素进行部分约束的任务。使用 xsd:any
后,您将失去对该点下方标记的控制。它的唯一选项涉及有效性如何受所遇到元素的定义的影响;参见 processContents strict vs lax vs skip for xsd:any。
尝试使第一个示例工作将是一场艰苦的战斗。 (您可以在 XSD 1.1 中使用断言,但您会不自然地强制断言执行旨在通过简单内容模型完成的操作。)使用第二种形式;更好的 XML 设计。
是否可以为递归的未知命名元素定义 XML 架构? 例如:
<Bob age="72">
<FavoriteColor>"Blue"</FavoriteColor>
<Children>
<Sally age="36">
<FavoriteColor>"Green"</FavoriteColor>
<Children />
</Sally>
<Joe age="34">
<FavoriteColor>"Red"</FavoriteColor>
<Children>
<Tina age="5">
<FavoriteColor>"Blue"</FavoriteColor>
<Children />
</Tina>
<Frank age="6">
<FavoriteColor>"Yellow"</FavoriteColor>
<Children />
</Frank>
</Children>
</Joe>
</Children>
</Bob>
我是 XSD 的新手,但我认为这需要递归和 <xs:any>
.
见: Recursion in an XML schema? 和 how can I define an xsd file that allows unknown (wildcard) elements?
但是我找不到不涉及用更严格的形式重写我的隐含 Person
元素的解决方案:
<Person name="Bob" age="72">
<FavoriteColor />
<Children />
原始 XML 架构可用吗?
您已正确识别 xsd:any
作为允许 Children
下的任何元素的解决方案,并且您已正确识别表示类家谱结构的递归类型模式。
然而,xsd:any
不能胜任对其管辖的元素进行部分约束的任务。使用 xsd:any
后,您将失去对该点下方标记的控制。它的唯一选项涉及有效性如何受所遇到元素的定义的影响;参见 processContents strict vs lax vs skip for xsd:any。
尝试使第一个示例工作将是一场艰苦的战斗。 (您可以在 XSD 1.1 中使用断言,但您会不自然地强制断言执行旨在通过简单内容模型完成的操作。)使用第二种形式;更好的 XML 设计。