需要特定根元素的XSD是否存在于XML文档中?

问题描述 投票:2回答:3

我想验证一个XML文件,并确保它有一个名为speak的根元素,如下所示:

<speak>
  <!--other node here...-->
</speak>

speak元素必须以XML格式存在,并且必须只出现一次。我尝试在我的XSD文件中添加以下代码:

<xsd:element name="speak" type="speak" minOccurs="1" maxOccurs="1"/>

但它不起作用。

xml xsd xsd-validation xml-validation
3个回答
0
投票

根元素不允许XSD出现约束,因为XML文档已经被约束为由单个根元素组成。因此,只需指定一个全局元素声明,并声明XML中所需的根元素。无论如何它实际上将是minOccurs="1" maxOccurs="1"


0
投票

您可以在sequence元素上使用minOccurs / maxOccurs,如下所示:

 <xs:element name="speak">
     <xs:complexType>
         <xs:sequence minOccurs="1" maxOccurs="1">
             ...
         </xs:sequence>
     </xs:complexType>
 </xs:element>

但它没有必要,因为它是一个冗余的默认属性值赋值。


0
投票

在模式本身中,您不能对根元素必须具有约束。 (这是设计,虽然不是每个人都认为这是一个好的设计。)任何全局元素声明都可以匹配根元素。

一些用于调用验证的API可能允许您约束根元素。例如,如果使用Saxon模式验证器并从命令行运行它,则可以指定-top:speak以要求顶级元素命名为speak

© www.soinside.com 2019 - 2024. All rights reserved.