2012-08-27 114 views
1

我有三個的XSD:deviceprofile.xsd,relatedType.xsd和profilelist.xsdXSD導入問題

deviceprofile.xsd是根XSD是指relatedtype.xsd,這反過來又指profilelist.xsd。

relatedtype.xsd和profilelist.xsd之間的引用工作正常,但deviceprofile.xsd和relatedType.xsd之間的關係給出問題。

我已導入的XSD與相關的命名空間,但JAXB解析deviceprofile.xsd,其捐贈時:

[ERROR] src-resolve: Cannot resolve the name 'relatedData' to a(n) 'element decl 
aration' component. 
line 47 of file:/D:/Personal/Java/Trials/src/com/asl/trials/cea/xml/deviceprof 
ile.xsd 

Failed to parse a schema. 

的XSD文件都在同一目錄中,所以我可以肯定,它不是一個路徑問題。

有人可以指出我在做什麼錯???

我重視以下(以防萬一)的XSD文件的有關片段:

deviceprofile.xsd 
<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns="urn:schemas-upnp-org:remoteui:uilist-1-0" targetNamespace="urn:schemas-upnp-org:remoteui:uilist-1-0" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" id="uilist"> 
<xs:import namespace="urn:schemas-ce-org:ce-html-server-caps-1-0" schemaLocation="relatedtype.xsd" /> 
<xs:element name="uilist"> 
<xs:complexType> 
<xs:sequence> 
<xs:element ref="relatedData" minOccurs="1" maxOccurs="1" /> 
</xs:sequence> 
</xs:complexType> 
</xs:element> 
</xs:schema> 
relatedtype.xsd 
<?xml version="1.0" encoding="ISO-8859-1"?> 
<xs:schema xmlns="urn:schemas-ce-org:ce-html-server-caps-1-0" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:schemas-ce-org:ce-html-server-caps-1-0" 
    elementFormDefault="qualified" attributeFormDefault="unqualified"> 
    <xs:include schemaLocation="profilelist.xsd" /> 
    <xs:element name="relatedData" type="relatedType" /> 
    <xs:complexType name="relatedType"> 
     <xs:sequence> 
      <xs:element name="keyword" type="xs:string" minOccurs="0" 
       maxOccurs="unbounded" /> 
      <xs:element ref="profilelist" minOccurs="1" maxOccurs="unbounded" /> 
      <xs:element name="saveStateStorageURL" type="xs:anyURI" 
       minOccurs="0" maxOccurs="1" /> 
      <xs:element name="savedStatesInfo" type="savedStatesInfoType" 
       minOccurs="0" maxOccurs="1" /> 
     </xs:sequence> 
    </xs:complexType> 
    <xs:complexType name="savedStatesInfoType"> 
     <xs:attribute name="saveTime" type="xs:string" /> 
     <xs:attribute name="forUser" type="xs:string" use="optional" /> 
    </xs:complexType> 
</xs:schema> 
profilelist.xsd 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    elementFormDefault="qualified" attributeFormDefault="unqualified"> 
    <xs:element name="profilelist" type="profileListType" /> 
    <xs:complexType name="profileListType"> 
</xs:complexType> 
... 
</xs:schema> 
+0

這不僅僅是一個錯字問題,是嗎?在'deviceprofile.xsd'中,您指的是'relatedtype.xsd',但是您將該文件標記爲'relatedType.xsd'。 – davidfmatheson

+0

@david:這是......我現在正在編輯它以避免更進一步的混淆...... –

回答

1

deviceprofile.xsd模式,您將需要聲明urn:schemas-ce-org:ce-html-server-caps-1-0命名空間,然後包括在ref值對應的前綴。下面我用foo作爲前綴:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns="urn:schemas-upnp-org:remoteui:uilist-1-0" 
    targetNamespace="urn:schemas-upnp-org:remoteui:uilist-1-0" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:foo="urn:schemas-ce-org:ce-html-server-caps-1-0" 
    elementFormDefault="qualified" 
    attributeFormDefault="unqualified" id="uilist"> 
    <xs:import namespace="urn:schemas-ce-org:ce-html-server-caps-1-0" 
     schemaLocation="relatedtype.xsd" /> 
    <xs:element name="uilist"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element ref="foo:relatedData" minOccurs="1" maxOccurs="1" /> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 
+1

謝謝布萊斯......你的解決方案像魅力一樣工作...... –