10

私はこれが関係していると信じていますがkeyref、確かではありません。

たとえば、myElement1 と myElement2 があるとします。XML ファイルに myElement2 がない場合、myElement1 が存在する必要があります。それ以外の場合はオプションです。

XSD ファイルでこのタイプの検証を強制する方法はありますか?

4

2 に答える 2

25

同様の質問が何度か寄せられています..スタックオーバーフローまたは技術ブログで..

しかし、答えは常に不可能です。


のような場合:

(a) 他の要素/属性
の値または存在に応じて要素を検証する (b) 値または他の要素/属性の存在に応じて要素の値を
検証する (c) 値または他の要素/属性の存在に応じて属性を検証する他の要素/属性
(d) 同じスコープの下で異なるタイプ/データ型を持つ同じ名前の要素/属性を定義する
(e) 値または他の要素/属性の存在に基づいて子要素を検証する

上記のすべてのケースを達成することはできません..

しかし、何らかの変換を実装できれば、助けを得ることができます。私が言いたいのは、「最初に変換を行い、必要に応じて XML を変更し、

例 :: 特定のフィールドに何らかの値が期待される場合.. 条件が満たされている場合は XML をそのまま渡し、満たされていない場合は渡さない.. 次のブロックで XSD が検証され、明らかにエラーが発生する:)カスタム検証が欠落していることがわかります..

とにかく、意図はデータに従ってxmlをブロックまたは渡すことです..そしてそれはあなたがしていることです..

注: Schematronは、最近よく実践されています。チュートリアルは次のとおりです。http://zvon.org/xxl/SchematronTutorial/General/contents.html

于 2010-11-10T05:43:40.407 に答える
1

私が提案するのは、以下に定義されているケースごとに XSD を作成することです。

次のような場合:

  1. 他の要素/属性の値または存在に応じて要素を検証します。
  2. 他の要素/属性の値または存在に応じて、要素の値を検証します。
  3. 他の要素/属性の値または存在に応じて属性を検証します。
  4. 検証から (ランダムな) 要素/属性を無視することは許可されていません。(つまり、の使用には制限があります。)
  5. 異なるデータ型を持つ同じ名前の要素/属性。
  6. 他の要素/属性の値または存在に基づいて子要素を検証します。

そして、そのための独自の XML を作成します。

于 2012-07-13T13:17:14.557 に答える