2012-01-06 10 views
0

2つのスキーマがあります。
まず:2つのスキーマを使用する場合、1つのxmlルート要素のみを許可します。

<?xml version="1.0" encoding="utf-8"?> 
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
     targetNamespace="ns1" 
     elementFormDefault="qualified"> 

<element name="A" type="string"/> 

</schema> 

第二:

<?xml version="1.0" encoding="utf-8"?> 
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
     targetNamespace="ns2" 
     xmlns:ns1="ns1" 
     elementFormDefault="qualified"> 

<element name="B"> 
    <complexType> 
     <sequence> 
      <element ref="ns1:A"/> 
     </sequence> 
    </complexType> 
</element> 

</schema> 

だから、インスタンスXMLに私は2つのルート要素を使用することができます。
例1:

<?xml version="1.0" encoding="utf-8" ?> 
<A xmlns="ns1">sdfdfd</A> 

例2:

のみ例2を許可する方法
<?xml version="1.0" encoding="utf-8" ?> 
<B xmlns="ns2"><A xmlns="ns1">sdfdfd</A></B> 

+0

? –

+0

これは、デジタル署名付きXMLを検証するスキーマが必要なためです。だから私は常にルート要素として 'A'が必要です。もちろん、スキーマなしで検証することはできますが、スキーマの検証中にそれを実行できるかどうかは疑問です。 – Stanislav

答えて

1

スキーマバリデータのAPIによって異なります。

一般に、要素がスキーマに対して有効である場合、その要素のすべての子も有効です。したがって、2番目のインスタンスが有効な場合、XSDはドキュメントではなく要素を検証するため、最初のインスタンスも有効です。

ただし、スキーマ検証ツールでは、検証のためにルートノードを指定できます。あなたのスキーマ・バリデータとしてサクソンを使用している場合たとえば、その後、コマンドラインから、あなたは

-topを指定することができます{NS2} B

を参照してくださいhttp://www.saxonica.com/documentation/schema-processing/commandline.xml

あなたは例1を許可しないようにしたいと思うのはなぜ
+0

C#、XmlReaderクラスのアナログ命令がありますか? – Stanislav

関連する問題