我正在嘗試使用XML Includes來幫助管理一個需要可供人類和機器使用的大型XML結構。XInclude架構/名稱空間驗證?
但是在嘗試構建可以針對現有模式進行驗證的XML文件時,遇到了無數的問題。這是我想要做的一個簡單的例子。
我的「main.xml」文件不驗證。
<?xml version="1.0" encoding="UTF-8"?>
<!-- Main.xml - This fails to validate. -->
<ns1:main xsi:schemaLocation="http://www.example.com/main main.xsd"
xmlns:ns1="http://www.example.com/main"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xi="http://www.w3.org/2001/XInclude">
<name>String</name>
<xi:include href="child.xml"/> <!-- What I'm trying to do. -->
</ns1:main>
「child.xml」文件可以很好地驗證爲獨立文件。
<?xml version="1.0" encoding="UTF-8"?>
<!-- Child.xml - This validates fine, as a standalone file. -->
<ns1:child xsi:schemaLocation="http://www.example.com/main main.xsd"
xmlns:ns1="http://www.example.com/main"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<name>String</name>
<age>String</age>
</ns1:child>
這裏是我的架構:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Main.xsd - My Simplified Schema -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:ns1="http://www.example.com/main"
targetNamespace="http://www.example.com/main">
<!-- Main Element (References Child) -->
<xs:element name="main">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element ref="ns1:child"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Child Element -->
<xs:element name="child">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="age" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
我的問題是幾乎顯然與命名空間,但我在爲如何解決我的問題的損失。
嘗試驗證時會出現什麼錯誤? – skaffman 2009-07-08 13:39:17
當解析main.xml時,我看到錯誤:「'schemaLocation'屬性引用了一個模式,該模式的目標名稱空間已被用於驗證。」 - 在Altova的XML Spy中。 – Nate 2009-07-08 13:47:11