5

XML とスキーマの検証に関する私の滞在から、XMLReaderインスタンスに対してフラグメントレベルの適合性が有効になっている場合、XML ソースは含まれている Schemasに対して検証されなくなるようです。

ただし、適合レベルに照らして XSD スキーマの動作を説明していないように見えるため、MSDN ドキュメントからこれを確認することはできません。また、この問題が本当であると仮定すると、回避策が見つかりません。

XSD スキーマに対してXMLフラグメントを検証する方法を知りたいです。

私の場合、XHTML 1 Strict Schemaに対して検証しています。<center> のような非推奨の HTML タグが無効としてフラグ付けされていないという事実により、これがフラグメントの適合性がスキーマを無視すると私が信じる理由の一部です。また、同じシナリオでドキュメント レベルの準拠を使用すると、有効性エラーが正常にフラグ付けされます。

私が使用しているタイプの検証シナリオのコード サンプルについては、こちらを参照してください

4

1 に答える 1

2

私は、この MSKB の記事で奇妙なことに答えを見つけたと思います。 HOW TO: Validate XML Fragments Against an XML Schema in Visual C#.NET 記事の下部には、次のように記載されています。

注: XML スキーマの型宣言と最上位要素のみが XML スキーマに対して検証されます。サブ要素はローカルと見なされるため、検証できません。サブ要素を検証するには、最上位の要素を宣言して参照します。

その段落には間違いがあると思います。top-level elements in the XMLschema document/fragment are validated against an XML Schema

Microsoft コード サンプルは、(ドキュメント内で任意にではなく) トップ レベルでフラグメントを開始するため、検証で機能します。ただし、私の場合、ドキュメントの中間構造を使用しています。

私の解釈が間違っていたら訂正してください。


回避策/解決策

回避策は、検証のためにフラグメントを最上位要素内に詰め込むことです。

つまり、XHTML フラグメントを扱っている場合:

<div>MY FRAGMENT</div>

次のように XHTML Strict Schema に準拠するように検証用にラップできます。

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>HTML fragment enclosed, conforming to XHTML 1.0 Strict Template.</title>
</head>
<body>

    <div>MY FRAGMENT</div>

</body>
</html>

この解決策は私にとってはうまくいくので、暫定的に使用します。より良い解決策が存在するかどうかはまだわかりません。

于 2010-09-03T19:15:21.417 に答える