2013-10-20 46 views
0

我無法理解聲明XML架構的某些行爲。在聲明xml架構名稱空間後無法找到數據類型

問題 此XML模式正常工作:

*<?xml version="1.0" encoding="windows-1252" ?> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
      xmlns="http://www.example.org" xmlns:ab="http://test.com" 
      targetNamespace="http://www.example.org" 
      elementFormDefault="qualified"> 
    <xsd:element name="simple1" type="complexType1"/> 

    <xsd:complexType name="complexType1"> 
    <xsd:sequence> 
     <xsd:element name="element1" type="xsd:string"/> 
    </xsd:sequence> 
    </xsd:complexType> 
</xsd:schema>* 

但是,如果我從http://www.example.org除了改變的targetNamespace什麼,架構沒有找到complexType1。爲什麼會這樣。 這不起作用。

*<?xml version="1.0" encoding="windows-1252" ?> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
      xmlns="http://www.example.org" xmlns:ab="http://test.com" 
      targetNamespace="http://www.example.org99999" 
      elementFormDefault="qualified"> 
    <xsd:element name="simple1" type="complexType1"/> 

    <xsd:complexType name="complexType1"> 
    <xsd:sequence> 
     <xsd:element name="element1" type="xsd:string"/> 
    </xsd:sequence> 
    </xsd:complexType> 
</xsd:schema>* 

在此先感謝

回答

0

在聲明組件,如complexType,它會在架構的targetNamespace。當您使用前綴不明的名稱引用組件時(如在type="complexType1"屬性中),這將作爲默認名稱空間(在xmlns屬性中聲明)的引用。在你的第一個例子中,targetNamespace和默認的命名空間是相同的,所以它的工作原理;在第二個例子中它們是不同的,所以它不是。

如何解決?這取決於你試圖達到的目標,而你沒有告訴我們。

+0

嗨邁克爾,謝謝你回答他的問題。我仍然不理解部分「當你聲明一個組件,比如complexType時,它會進入模式的targetNamespace」。我已經聲明瞭xsd:complexType。我已經使用了xsd前綴。那麼爲什麼xsd:complexType會進入目標命名空間呢? – subhadip21a

+0

你誤解了我的答案。當您在模式'中編寫時,其效果是聲明一個類型,其本地名稱爲「foo」,其名稱空間是包含的模式文檔的targetNamespace。 –

相關問題