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

时间:2019-03-06 01:14:25

标签: xml xsd xsd-validation xml-validation

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

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

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

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

但这不起作用。

3 个答案:

答案 0 :(得分:0)

根元素上不允许

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

答案 1 :(得分:0)

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

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

但这不是必需的,因为这是多余的默认属性值分配。

答案 2 :(得分:0)

在模式本身中,您不能对根元素必须是什么施加约束。 (这是设计使然,尽管并非所有人都认为这是一个好的设计。)任何全局元素声明都可以匹配根元素。

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