在XML文件中,我想在默认命名空间中使用自由格式,但在不同的地方应该允许某些元素位于特定的命名空间中。我只希望验证这些元素。所以我想要的是这样的:
<document xmlns:x="http://myNamespace">
<someElement1>
<x:toBeValidated1/>
<someElement2>
<x:toBeValidated2 someAtt="someValue">
<someMoreStuff/>
</x:toBeValidated2>
</someElement2>
</someElement1>
</document>
问题是,我可以编写一个模式来验证这个吗?它应该允许任何元素在任何地方,但http://myNamespace命名空间mu中的元素符合模式中的相应定义。
答案 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>
我认为你至少无法定义根元素,但是它可以以允许任何子元素或属性的方式定义。