我想验证一个XML文件,并确保它有一个名为speak
的根元素,如下所示:
<speak>
<!--other node here...-->
</speak>
speak
元素必须以XML格式存在,并且必须只出现一次。我尝试在我的XSD文件中添加以下代码:
<xsd:element name="speak" type="speak" minOccurs="1" maxOccurs="1"/>
但它不起作用。
根元素不允许XSD出现约束,因为XML文档已经被约束为由单个根元素组成。因此,只需指定一个全局元素声明,并声明XML中所需的根元素。无论如何它实际上将是minOccurs="1" maxOccurs="1"
。
您可以在sequence元素上使用minOccurs / maxOccurs,如下所示:
<xs:element name="speak">
<xs:complexType>
<xs:sequence minOccurs="1" maxOccurs="1">
...
</xs:sequence>
</xs:complexType>
</xs:element>
但它没有必要,因为它是一个冗余的默认属性值赋值。
在模式本身中,您不能对根元素必须具有约束。 (这是设计,虽然不是每个人都认为这是一个好的设计。)任何全局元素声明都可以匹配根元素。
一些用于调用验证的API可能允许您约束根元素。例如,如果使用Saxon模式验证器并从命令行运行它,则可以指定-top:speak
以要求顶级元素命名为speak
。