XSD定义自由格式,一个名称空间除外

时间:2011-12-22 13:23:37

标签: xml namespaces xsd schema xml-namespaces

在XML文件中,我想在默认命名空间中使用自由格式,但在不同的地方应该允许某些元素位于特定的命名空间中。我只希望验证这些元素。所以我想要的是这样的:

<document xmlns:x="http://myNamespace">
  <someElement1>
    <x:toBeValidated1/>
    <someElement2>
      <x:toBeValidated2 someAtt="someValue">
        <someMoreStuff/>
      </x:toBeValidated2>
    </someElement2>
  </someElement1>
</document>

问题是,我可以编写一个模式来验证这个吗?它应该允许任何元素在任何地方,但http://myNamespace命名空间mu中的元素符合模式中的相应定义。

1 个答案:

答案 0 :(得分:0)

这可以主要完成。您需要定义一个涵盖您要验证的类型的模式:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://myNamespace">
    <xs:element name="toBeValidated1">
        <xs:complexType>
            <xs:sequence/>
        </xs:complexType>
    </xs:element>

    <xs:element name="toBeValidated2">
        <xs:complexType>
            <xs:sequence>
                <xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
            </xs:sequence>
            <xs:attribute name="someAtt" type="xs:string"/>
        </xs:complexType>
    </xs:element>
</xs:schema>

将其导入到定义文档根元素的模式中:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:import namespace="http://myNamespace" schemaLocation="other.xsd"/>
    <xs:element name="document" type="xs:anyType"/>
</xs:schema>

我认为你至少无法定义根元素,但是它可以以允许任何子元素或属性的方式定义。