1

XmlDocumentそのフラグメントのみを表す XSD に対して のフラグメントを検証しようとしています。例えば:

<!-- Validate entire message against message.xsd -->
<?xml version="1.0" encoding="utf-8" ?>
<Message>
    <Header>
        ...
    </Header>
    <Body>
        <!-- Validate this against body.xsd -->
        ...
    </Body>
</Message>

メッセージ全体が、開発者提供のmessage.xsdスキーマに対して検証されます。要素のコンテンツは、クライアント提供のbody.xsdスキーマ<Body>に対して検証されます。

body.xsdスキーマは、要素または要素について何も認識していません。要素内に含まれるべきものを定義するだけです。<Message><Header><Body><Body>

XML スキーマ フラグメントに対して XML フラグメントを検証する方法がわかりません。すべてが、XML スキーマ フラグメントがその祖先要素をすべて把握している必要があることを示唆しているようです。いくつかのパスを念頭に置いていますが、それらを実装する方法がわかりません。

  1. body.xsdをmessage.xsdの適切なノードにプログラムで挿入します。
  2. XmlElementから適切なものを抽出し、このノードに基づいてXmlDocument新しい を作成します。XmlDocument
  3. 私がまだ理解していない名前空間と関係があります。

この問題にはどのような解決策がありますか?

4

1 に答える 1

0

スキーマ検証用のネイティブ .NET API についてはよくわかりませんが、検証 API はルート以外の要素を検証できるほど柔軟ではないことがよくあります。これを行う 1 つの方法は、クエリを使用して、スキーマ対応の XQuery プロセッサ (Saxon-EE など) を使用して検証を呼び出すことです。

import schema ... at "body.xsd";
validate strict {/Message/Header/Body}
于 2012-06-25T08:11:12.657 に答える