在XSD架构中苦苦挣扎

时间:2014-06-17 20:31:33

标签: xml xsd xsd-validation

我有以下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
遗憾的是,

并没有做到这一点。

2 个答案:

答案 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>