2013-12-09 58 views
1

我經歷了幾個教程,但我無法像我想的那樣工作作爲我的XSD導入。請在此幫助我。在XSD上需要幫助導入另一個XSD值

這是我的XML

<?xml version="1.0" encoding="UTF-8"?>  
     <mail> 
      <portalname>rezbase_v3</portalname> 
      <portalcolor1>'#b0b8da'</portalcolor1> 
      <portalcolor2>#0a1e75</portalcolor2> 
      <portalcolor3> '#333333'</portalcolor3> 
      <portalcolor4> '#e7eaf7'</portalcolor4> 
      <portalcolorfont1> '#bcc9ff'</portalcolorfont1> 
      <portalcolorfont2> '#000000'</portalcolorfont2>  
     </mail> 

和我對門戶網站的風格獨立的XSD看起來像這樣(StyleApplyerDetailsBuilder.xsd)

 <?xml version="1.0" encoding="ISO-8859-1" ?> 
     <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://NamespaceTest.com/StyleApplyerDetailsBuilder" elementFormDefault="qualified" > 
    <xs:group name="colors"> 
     <xs:sequence> 
     <xs:element name="portalcolor1" type="xs:string"/> 
     <xs:element name="portalcolor2" type="xs:string"/> 
     <xs:element name="portalcolor3" type="xs:string"/> 
     <xs:element name="portalcolor4" type="xs:string"/> 
     <xs:element name="portalcolorfont1" type="xs:string"/> 
     <xs:element name="portalcolorfont2" type="xs:string"/> 
     </xs:sequence> 
    </xs:group> 
      </xs:schema> 

和我的主要XSD是這樣的(主。 XSD)

<?xml version="1.0" encoding="ISO-8859-1" ?> 
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:include schemaLocation="../../xsdFactory/commons/StyleApplyerDetailsBuilder.xsd"/> 
    <xs:element name="mail"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element type="xs:string" name="portalname"></xs:element> 
      <!-- I need to import my other xsd(StyleApplyerDetailsBuilder) to here so I can validate my xml --> 
     <xs:group ref="colors" maxOccurs="unbounded" minOccurs="1"/>   
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
    </xs:schema> 

我需要的是進口StyleApplyerDetailsBuilder.xsd到main.xsd並驗證上述的XML。

+1

您是否嘗試過使用'XSD:include'?請參閱http://stackoverflow.com/questions/332792/can-i-have-one-xml-schema-xsd-include-another-xml-schema –

回答

1

您可以使用

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:include schemaLocation="StyleApplyerDetailsBuilder.xsd"/> 
    <xs:element name="mail"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element type="xs:string" name="portalname"></xs:element> 
     <!-- I need to import my other xsd(StyleApplyerDetailsBuilder) to here so I can validate my xml --> 
     <xs:element ref="portalcolor1"/> 
     <xs:element ref="portalcolor2"/> 
     <!-- reference the other elements here --> 

     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

通常你會定義一組,並說明如在樣式表中要包括你定義

<xs:group name="colors"> 
    <xs:sequence> 
    <xs:element name="portalcolor1" type="xs:string"/> 
    <xs:element name="portalcolor2" type="xs:string"/> 
    <xs:element name="portalcolor3" type="xs:string"/> 
    <xs:element name="portalcolor4" type="xs:string"/> 
    <xs:element name="portalcolorfont1" type="xs:string"/> 
    <xs:element name="portalcolorfont2" type="xs:string"/> 
    </xs:sequence> 
</xs:group> 

然後使用包括如圖所示但不是所有引用您使用不同的元素

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:include schemaLocation="StyleApplyerDetailsBuilder.xsd"/> 
    <xs:element name="mail"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element type="xs:string" name="portalname"></xs:element> 
     <!-- I need to import my other xsd(StyleApplyerDetailsBuilder) to here so I can validate my xml --> 
     <xs:group ref="colors"/>   
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 
+0

是否有任何其他方式,沒有通過提供單一引用訪問來提供所有引用到子節點 – RezgHansa

+1

@RezgHansa,我添加了定義和引用組的示例代碼。 –

+0

嗨,我已經改變了這個問題,並試過你的方式,但它給了我這樣的錯誤「org.xml.sax.SAXParseException; systemId:file:/rezsystem/rezsystem_hansa/jboss-4.0.3SP1/server/default/deploy/ RezgEmailService.war/xsd/xsdFactory/commons/StyleApplyerDetailsBuilder.xsd; lineNumber:2; columnNumber:158; src-include.2.1:引用模式的targetNamespace,當前爲'http://NamespaceTest.com/StyleApplyerDetailsBuilder',必須爲與包含模式相同,當前爲'null'。 「 – RezgHansa