2012-01-06 77 views
0

我有2个模式。
第一:使用两个模式时只允许一个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:

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

如何允许仅实施例2?

+0

为什么要不让例如1? – 2012-01-06 10:49:20

+0

这是因为我需要schema来验证带有数字签名的xml。所以我总是需要'A'作为根元素。当然,我可以在没有模式的情况下对其进行验证,但是我不知道在模式验证期间是否可以这样做。 – Stanislav 2012-01-09 04:39:06

回答

1

它取决于您的模式验证器的API。一般来说,如果一个元素对一个模式有效,那么该元素的每个子元素也是有效的:因此,如果你的第二个实例是有效的,那么你的第一个元素也是有效的,因为XSD验证元素而不是文档。

但是,模式验证器可能允许您指定用于验证的根节点。因为如果你使用撒克逊为您的架构验证例如,然后在命令行中,你可以指定

机顶:{} NS2乙

http://www.saxonica.com/documentation/schema-processing/commandline.xml

+0

C#中是否有类似XmlReader的.Net类模拟指令? – Stanislav 2012-01-06 11:50:19

相关问题