2009-05-27 80 views
6

嗨我想讓我的思想圍繞XSD,XML和命名空間,但我無法讓事情按照我希望的方式工作。XSD與進口和命名空間

我有一個XSD其中,此刻,開始是這樣的:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="unqualified" 
      xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      xmlns="http://www.example.com"> 
    <xs:import namespace="http://www.example.com" schemaLocation="Include.xsd" /> 

正如你所看到的,它導入另一個XSD文件,開始是這樣的:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="unqualified" 
      targetNamespace="http://www.example.com" 
      xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      xmlns="http://www.example.com"> 

然後我有基於此架構的一些XML文檔:

<foobar> 
    <whatever>.... 

基本上我不關心的命名空間是什麼,我舉我希望這件事能夠發揮作用。以前我沒有使用任何命名空間,但似乎我必須使用它們才能將一個XSD導入到另一個。我不想做的是必須爲我的xml文檔中的所有元素提供前綴。

爲了實現這個目標,我需要爲XSD和XML文檔中的各種屬性(targetNamespace,namespace,xmlns,elementFormDefault等)創建什麼樣的組合值?

當前,導入的XSD文檔中定義的任何元素都需要XML中的名稱空間限定。

+0

請問您的文檔實際上 meaninging你在架構中的一個定義的「XML」元素,或者你的意思是文件與開始啓動? – Jherico 2009-05-27 05:22:43

+0

我的意思是根是XML - 我已經修復它以避免混淆。 – cbp 2009-05-27 05:29:39

回答

13

如果不使用名稱空間或者您的架構共享相同的命名空間,你會使用XS好得多:包括而非XS:進口。如果B或者具有與A相同的名稱空間或者沒有聲明名稱空間(如果後者是這種情況,B'採用包含者包含的名稱空間),則模式A可以包括模式B.所以......是這樣的:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="unqualified" 
      xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      xmlns="http://www.example.com"> 
    <xs:include schemaLocation="Include.xsd" /> 

<!-- ... --> 

</xs:schema> 
1

如果你想避免XML元素的前綴,我認爲你需要設置你的elementFormDefault爲「非限定」。其餘的應該沒問題,我認爲 - 您的主控和您導入的XSD之間的命名空間是相同的 - 沒關係。你指定xmlns =沒有前綴 - 這很好。你應該很好走。

馬克

+0

謝謝,你是對的 - 我比我想象的更接近。然而,我發現當我創建我的XML文檔時,在導入的XSD中定義的元素需要指定命名空間(即使導入的XSD和實際的XSD都將elementFormDefault設置爲'不合格')。 – cbp 2009-05-27 05:32:09