【发布时间】:2015-03-12 15:42:03
【问题描述】:
我正在尝试在由更多文件组成的 xml 文件上使用命名空间。
XML 架构
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema
version="1.0"
attributeFormDefault="unqualified"
elementFormDefault="qualified"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="urn:mynamespace"
targetNamespace="urn:mynamespace">
<xsd:element name="main_element" type="typeMainElement" />
<xsd:complexType name="typeMainElement">
<xsd:sequence>
<xsd:element name="inner_element" type="typeInnerElement" />
</xsd:sequence>
<xsd:attribute name="test_attribute" type="xsd:string" use="required" />
</xsd:complexType>
<xsd:complexType name="typeInnerElement">
<xsd:sequence>
<xsd:element name="description" type="xsd:string" minOccurs="0" />
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
主要 XML
<main_element test_attribute="value"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns="urn:mynamespace">
<inner_element>
<description>Test</description>
</inner_element>
</main_element>
用 XML Schema 验证 XML 效果很好。
但是,如果我尝试将 XML 的某些部分外包出去,依靠XInclude,那么就没有任何效果了。
拆分的 XML
<main_element test_attribute="value"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns="urn:mynamespace">
<xi:include href="simple_part.xml" />
</main_element>
包含的 XML
<inner_element>
<description>Test</description>
</inner_element>
尝试验证 Splitted XML 返回错误:
simple_part.xml:1:元素 inner_element:模式有效性错误:元素“inner_element”:不需要此元素。预期为 ( {urn:mynamespace}inner_element )。
simple_main_element.xml 验证失败
似乎当包括我失去了命名空间继承,所以被包含的内容不再有命名空间了。
-- 我如何解决这个问题,而不在任何地方添加命名空间前缀? --
-- 附加问题:如果包含来自另一个目录,例如<xi:include href="subdir/simple_part.xml" />,如何解决问题?
【问题讨论】:
标签: xml xml-namespaces xsd-validation xinclude