2011-07-15 72 views
1

我有可能擁有相當多的小型XSD,其中包含大型項目的各種類型。 (組件)創建多個XSD的庫

我也有大量的XSD需要大量的這些單獨的XSD。 (屏幕)

我知道我可以將每個「組件」導入到每個「屏幕」XSD中。但是每個人都需要做很多工作。

我希望我能做的是將這些「組件」中的每一個導入到單個XSD(ComponentLibrary)中,然後將這一個「ComponentLibrary」導入到每個「Screen」XSD中。

我寫了我認爲可能是需要的代碼,但它似乎並不想工作。我得到的是未聲明的錯誤。

TF.xsd:

<xs:schema targetNamespace="http://namespace.com/TF" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    elementFormDefault="qualified"> 

    <xs:complexType name="TFType"> 
     <xs:attribute name="size" type="xs:decimal" /> 
     <xs:attribute name="colour" type="xs:decimal" /> 
    </xs:complexType> 
</xs:schema> 

ComponentsLibrary.xsd:

<xs:schema targetNamespace="http://namespace.com/ComponentsLibrary" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:tf="http://namespace.com/TF" 
    elementFormDefault="qualified"> 

    <xs:import schemaLocation="TF.xsd" namespace="http://namespace.com/TF"/> 
    <xs:element name="TF" type="tf:TFType" /> 
</xs:schema> 

Screen1.xsd:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:cl="http://namespace.com/ComponentsLibrary" 
    elementFormDefault="qualified"> 

    <xs:import schemaLocation="ComponentsLibrary.xsd" namespace="http://namespace.com/ComponentsLibrary" /> 

    <xs:element name="tfTitle" type="cl:TF" /> 
</xs:schema> 

錯誤我得到

Screen1.xsd (8:3) Error Type 'http://namespace.com/Components:TF' is not declared. 

回答

2

你的組件庫架構聲明的元素 TF,不是 TF,因此在Screen1.xsd錯誤。

如果您確實想在ComponentLibrary中使用TF類型,那麼您可以使用chameleon schema approach

  • TF.xsd應該沒有命名空間,然後
  • ComponentLibrary應該包括(未進口)TF.xsd
  • 在TF.xsd所有類型現在是ComponentLibrary命名空間
+0

下可用精美的作品。謝謝。 – WORMSS