2014-03-19 88 views
1

我有2個xsds。Xsd重新定義complexType

我試圖從第二個xsd中重新定義一些複雜類型。

但我得到重新定義驗證錯誤。

我不明白爲什麼。

第一XSD(ConfigProperties.xsd):

?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns="http://example.com/configProperties" targetNamespace="http://example.com/configProperties" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> 
<xs:element name="config-properties"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element ref="System"/> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 
<xs:element name="System"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element minOccurs="1" maxOccurs="1" name="PushMessageFields" type="PushMessageFields"/> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 
<xs:complexType name="PushMessageFields"/> 
</xs:schema> 

第二XSD(SomeConfigProperties.xsd):

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns="http://example.com/SomeConfigProperties" targetNamespace="http://example.com/SomeConfigProperties" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> 


    <xs:redefine schemaLocation="ConfigProperties.xsd"> 
     <xs:complexType name="PushMessageFields"> 
      <xs:complexContent> 
      <xs:extension base="PushMessageFields"> 
       <xs:sequence> 
       <xs:element name="color" type="xs:string"/> 
       </xs:sequence> 
      </xs:extension> 
      </xs:complexContent> 
     </xs:complexType> 
     </xs:redefine> 
</xs:schema> 

我得到第二XSD錯誤:「無法解析名稱'PushMessageFields'「。

我的問題在哪裏?

回答

2

它無法解析名稱,因爲它在http://example.com/SomeConfigProperties名稱空間中找不到PushMessageFields。空無一人。您無法從其他目標名稱空間重新定義類型。

除非您有其他錯誤,否則它應該工作,如果您更改新樣式表的目標名稱空間以匹配導入的目標名稱空間。在你的第二個XSD取代:

<xs:schema xmlns="http://example.com/SomeConfigProperties" 
      targetNamespace="http://example.com/SomeConfigProperties" ... > 

<xs:schema xmlns="http://example.com/configProperties" 
      targetNamespace="http://example.com/configProperties" ...> 
+0

THX。您的建議有效。但是我有一些必要性,那些2個xsds將在不同的命名空間中。也許有另一種方式重新定義這個complexType? – yanivsh

+1

不使用'redefine'。如果將「PushMessageFields」放置在另一個名稱空間中,則原始XSD將找不到它。你想做什麼? – helderdarocha

+0

我想重寫configPropertiea.xsd中的PushMessageFields。 – yanivsh