1

変更できないプロセスによって生成されたxmlドキュメントがあります。これは少し次のようになります。

<root>
  <foo bar="..." baz="..."/>
  <foo bar="..." baz="..."/>
  <foo bar="..." baz="..."/>
  <foo/>
  <foo/>
</root>

ファイルを読み取るプログラムが正しく実行されるために必要なため、foo要素に属性bazとbarを要求するようにスキーマを設定しました。ただし、上記のように、xmlを生成するプログラムは、最後に1つ以上の空のfoo要素を追加することがあります。これによりスキーマの検証が失敗しますが、プログラムが失敗する可能性があるため、スキーマを緩和して空のfoo要素を許可したくありません。

この問題を解決するための最良のアプローチが何であるかについて誰かが提案を持っていますか?私がこれまで考えてきた唯一の解決策は、xmlを前処理して、空のfoo要素を削除することですが、それは少し恐ろしいことです。

4

1 に答える 1

1

XSD 1.0では、一部のfoo要素に他のfoo(兄弟)要素とは異なる検証ルールが適用されていると言う方法はありません。XSD1.1ではアサーションを使用してそれを行うことができます。

検証する前に変換することは、実際にはそれほど悪いことではありません。ドキュメントを検証して実際の処理を行う前にドキュメントから除去する必要のあるノイズがわかっている場合は、検証の前にパイプラインに変換ステップを挿入することは非常に効果的な手法です。

于 2013-01-21T15:21:42.120 に答える