使用两个模式时,只允许一个xml根元素

时间:2012-01-06 09:04:56

标签: .net xml xsd

我有2个架构。
第一:

<?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?

1 个答案:

答案 0 :(得分:1)

这取决于架构验证程序的API。

通常,如果元素对模式有效,那么该元素的每个子元素也是有效的:因此,如果第二个实例有效,则第一个实例也是有效的,因为XSD验证元素而不是文档。

但是,架构验证程序可能允许您指定根节点以进行验证。例如,如果使用Saxon作为模式验证器,则可以从命令行指定

机顶:{NS2}乙

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