我有以下XML文档,有点简单:
<configuration>
<group name="database">
<server name="machine01" user="root" password="foob4r" sudo="true" hdd="300" loc="/opt" />
</group>
<group name="application">
<server name="machine01" user="root" password="foob4r" sudo="true" hdd="50" loc="/export" />
<server name="machine02" user="root" password="foob5r" sudo="true"/>
</group>
<group name="profiler">
<server name="machine03" user="root" password="blue123"/>
<server name="machine03" />
</group>
</configuration>
<configuration>
属性是必须,至少 <group>
属性至少一个 {{1是必须。
在服务器中,只有<server>
属性是必须的。
我想出了:
name
遗憾的是,并没有做到这一点。
答案 0 :(得分:3)
如果您有许多 <group>
个子元素,则必须声明maxOccurs="unbounded"
,因为默认,maxOccurs
时不存在,是1
。
<xsd:element minOccurs="1" maxOccurs="unbounded" name="group"> ...
与<server>
相同。在您的架构中,它只声明minOccurs="1"
。如果您不止一个,则需要添加maxOccurs
。 (如果只允许使用2台服务器,也可以使用固定值,例如maxOccurs="2"
。)属性 minOccurs="1"
保证至少有一个<{1}}且必须至少有一个<group>
。
对于属性,您需要指定它们不会被验证。使用<server>
后,您可以使用processContents="lax"
或processContents="skip"
执行此操作:
xsd:anyAttribute
这就是全部。具有这些更正的XSD如下所示,它应验证您的实例:
<xsd:anyAttribute processContents="lax"/>
答案 1 :(得分:0)
我猜你的XSD中缺少maxOccurs
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="configuration">
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="1" name="group" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="server" minOccurs="1" maxOccurs="unbounded">
<xsd:complexType>
<xsd:attribute name="name" type="xsd:string" />
<xsd:anyAttribute/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>