XSDを介して別の要素に基づいてXML要素を制限します
-
29-09-2019 - |
質問
私はこれが関係していると信じています keyref
しかし、私は確信していません、そして、それがまったくできるかどうかは本当にわかりません。
たとえば、MyElement1とMyElement2を持っているとします。 XMLファイルにmyElement2がない場合、myElement1が存在する必要があります。それ以外の場合はオプションです。
XSDファイルにこのタイプの検証を強制する方法はありますか?
解決
同様の質問が何度か尋ねられています。StackoverFlowまたは技術ブログで..
しかし、答えは常にです ありえない,
のようなケース:
(a)他の要素/属性の値または存在に応じて要素を検証する
(b)他の要素/属性の値または存在に応じて要素の値を検証する
(c)他の要素/属性の値または存在に応じて属性を検証する
(d)同じ範囲の下で異なるタイプ/データ型を持つ同じ名前の要素/属性の定義
(e)他の要素/属性の価値または存在に基づいて子要素を検証する
上記のすべてのケースは達成することはできません。
しかし、いくつかの変換のことを実装できれば..助けを得ることができます。私が言うことは、「最初に変換を経て、要件に従ってXMLを変更することです。
例::特定のフィールドが何らかの値で予想される場合..条件が満たされていない場合のようにXMLを渡し、そうでない場合に合格しないでください。 :)カスタム検証が欠落していることを理解できます。
とにかく意図はそうです ブロック また パス データに従ってXML ..そしてそれがあなたがしていることです。
ノート: スキーマトロン 最近良い練習に入ってきました!これがチュートリアルです: http://zvon.org/xxl/schematrontutorial/general/contents.html
他のヒント
私が提案するのは、以下に定義されている各ケースに対してXSDを作成することです。
のようなケース:
- 他の要素/属性の値または存在に応じて要素を検証します。
- 他の要素/属性の値または存在に応じて要素の値を検証します。
- 他の要素/属性の値または存在に応じて属性を検証します。
- 検証から(ランダム)要素/属性を無視することは許可されていません。 (私は言うことは、制限があることの使用法です。)
- 異なるデータ型を持つ同じ名前の要素/属性。
- 他の要素/属性の価値または存在に基づいて子要素を検証します。
そのために独自のXMLを作成します。