XSD中的<any>不起作用?</any>

时间:2009-09-22 08:45:32

标签: xml xsd

我正在尝试创建一个xml-schema(xsd)来验证xmlfile。

<a>
    <b>
        <c>...</c>
        <d>...</d>
    </b>
    <b>
        <c>...</c>
        <e>...</e>
            <d>...</d>
    </b>
<a>

1个元素。 多个b元素,有一些内容。

我想验证文件中是否存在a,以及b的一次或多次出现。我不想知道b里面是什么。

所以这就是我的尝试:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:element name="a">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="b" minOccurs="1" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="b">
        <xs:complexType>
            <xs:sequence>
                <xs:any minOccurs="1"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

我希望any - 元素会做出魔术,但事实并非如此。我做错了什么?

修改 XmlSpy给出了这个错误:元素'c'没有在DTD / Schema中定义。

2 个答案:

答案 0 :(得分:2)

您在模式中不需要额外的“b”,我认为您正在寻找的是:

    <?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
  <xs:element name="a">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="b" minOccurs="1" maxOccurs="unbounded">
          <xs:complexType>
            <xs:sequence>
              <xs:any maxOccurs="unbounded" minOccurs="1" processContents="lax"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

这表明您有<a>作为根节点,并且它可以包含一个或多个<b> s

编辑:抱歉,没有阅读完整的问题 - 请尝试以上操作!

第二次修改:上面的另一次尝试!

答案 1 :(得分:2)

并不像第一次出现那样自由自在。默认情况下,我相信,元素的内容仍然必须符合架构,只是它们可以是来自的架构。

如果您希望架构中不存在元素,则需要将其定义为:

<xs:any minOccurs="1" processContents="lax"/>

你可以使用“skip”而不是“lax”,这样的限制性更小。

有关详细信息,请参阅W3C spec