「IDTree」という名前が定義されたルート ノードで構成される XML ファイルがあります。このノードには、名前が定義されていない正確に 3 レベルの子孫が含まれます。これは、アプリケーションで XPath を使用して、この XML ファイル内の特定の値を適切に処理する必要があるためです。
例:
<IDTree>
<Foofoo id="0x00">
<Foobar id="0x00">
<Boofar id="0x00" />
<Fasfoo id="0x01" />
<Farfoo id="0x02" />
</Foobar>
<Foobas id="0x01">
<Bas id="0x00" />
<Bar id="0x01" />
<Foo id="0x02" />
</Foobas>
</Foofoo>
</IDTree>
「/IDTree/Foofoo/Foobas/Bar」などの XPath を使用してこれらのノードをアドレス指定し、0x00 0x01 0x01 などの 3 つの値に変換する必要があります。
この XML ファイルに格納されているデータは、何らかの形で「動的」です。つまり、これらの 3 つのレベル内で名前が指定されていないノードを追加、移動、削除することによって、おそらく拡張、編集、またはその他の方法で変更されます。
ただし、3 番目のレベルより下では、ノードには定義済みの名前が必要です。ルート ノードの下の 3 番目のレベルにあるすべてのノードには、"Description" という名前のゼロまたは 1 つの子ノードがあり、その子ノードには、"ShortDesc" および "Field" という名前のサブノードがあります。一方、「フィールド」には、「値」という名前のフィールドがゼロから多数あります。
ルート ノードのすべての子ノードには、定義された名前の属性があります。ルート ノードの下のレベル 1 ~ 3 にある、名前が指定されていないすべてのノードには、'id' 属性が必要です。レベル 3 未満の定義済みの名前を持つノードはすべて、そのタイプに応じて定義済みの属性を持ちます。
問題は、これらすべての要件とオプションを XML スキームで指定するにはどうすればよいかということです。