我想验证XML文件,并确保它具有一个名为speak
的根元素,如下所示:
<speak>
<!--other node here...-->
</speak>
speak
元素必须存在于XML中并且只能出现一次。我尝试在我的XSD文件中添加以下代码:
<xsd:element name="speak" type="speak" minOccurs="1" maxOccurs="1"/>
但这不起作用。
答案 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
。