XML 模式是否可以限制嵌套在父元素中的子元素的深度?
这里的上下文是我从管理系统收集警报,我想提供一个 XML 文档,允许最终用户定义一些规则,以便将警报过滤到 UI 中的文件夹中。我想将嵌套文件夹的深度限制为 3,这样最终用户就不能嵌套数百个级别,因为过滤到这么多级别最终会使应用程序崩溃。
我可以编写一些代码来处理这个问题,但如果可能的话,在模式中定义它似乎是合适的。
例如,这会很好:
<group name="Folder 1">
<group name="Folder 2">
<group name="Folder 3">
<group name="Folder 4">
</group>
</group>
</group>
</group>
这将是无效的,因为文件夹 5 太深。
<group name="Folder 1">
<group name="Folder 2">
<group name="Folder 3">
<group name="Folder 4">
<group name="Folder 5">
</group>
</group>
</group>
</group>
</group>
我的架构看起来像这样,但它不限制上面片段的深度。
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="hierarchy">
<xs:complexType>
<xs:sequence>
<xs:element name="group" type="GroupType" />
</xs:sequence>
<xs:attribute name="name" type="xs:string" />
</xs:complexType>
</xs:element>
<xs:complexType name="GroupType">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="1" name="group" type="GroupType" />
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required" />
<xs:attribute name="filterOn" type="xs:string" use="optional" />
<xs:attribute name="operator" type="xs:string" use="optional" />
<xs:attribute name="value" type="xs:string" use="optional" />
</xs:complexType>
</xs:schema>
非常感谢任何指针!