親にネストされた子要素の深さをXMLスキーマで制限することは可能ですか?
ここでのコンテキストは、管理システムからアラームを収集し、UI でアラームをフォルダーにフィルター処理するためにエンド ユーザーがいくつかのルールを定義できるようにする XML ドキュメントを提供したいということです。ネストされたフォルダーの深さを 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>
どんなポインタでも大歓迎です!