0
嘗試從XML模式導入共享定義時,我可以正確引用共享類型,但引用共享元素會導致驗證錯誤。XML模式:導入共享元素時的名稱空間問題
這是進口共享定義模式(example.xsd):
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:shared="http://shared.com">
<xs:import namespace="http://shared.com" schemaLocation="shared.xsd"/>
<xs:element name="example">
<xs:complexType>
<xs:sequence>
<xs:element ref="importedElement"/>
<xs:element ref="importedType"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="importedElement">
<xs:complexType>
<xs:sequence>
<xs:element ref="shared:fooElement"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="importedType">
<xs:complexType>
<xs:sequence>
<xs:element name="bar" type="shared:barType"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
這些都是共享的定義(shared.xsd):
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://shared.com"
targetNamespace="http://shared.com">
<xs:element name="fooElement">
<xs:simpleType>
<xs:restriction base="xs:integer"/>
</xs:simpleType>
</xs:element>
<xs:simpleType name="barType">
<xs:restriction base="xs:integer"/>
</xs:simpleType>
</xs:schema>
現在考慮這個XML實例:
<?xml version="1.0"?>
<example
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="example.xsd">
<importedElement>
<fooElement>42</fooElement>
</importedElement>
<importedType>
<bar>42</bar>
</importedType>
</example>
驗證時,「importedType」工作得很好,但「importedElement」給出S中的以下錯誤:
Invalid content was found starting with element 'fooElement'. One of '{" http://shared.com ":fooElement}' is expected
我猜想,我的煩惱都與命名空間的問題(因此在某種程度上誤導「了fooElement但期待fooElement」) - 在這裏有什麼不對任何提示?
我接受了你的答案,因爲它解決了我的問題。不幸的是,它並沒有解決我的問題:XML實例文檔部署在客戶端,它不是一個改變它們的選項。任何允許從共享XSD導入元素的名稱空間魔術*不*需要在XML實例中進行調整? – netzwerg 2010-04-15 06:25:31
那麼,是什麼讓你首先爲共享模式分配一個名稱空間呢?有什麼要求嗎?爲什麼不讓你的共享模式像你的郵件一樣沒有命名空間,並且使用include而不是import? – xcut 2010-04-15 07:28:15
我們以後使用JAXB訪問XML文檔。通過導入,共享類型的Java對應部分不是真正共享的,而是爲每個XSD重新生成的,因此很難在其周圍編寫實用程序代碼。 – netzwerg 2010-04-15 09:26:42