使用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>
非常感谢您的指导!