2012-09-26 107 views
2

這裏的問題是 - 是否有可能從xsd導入類型的子集?從一個xsd導入只有幾個類型到另一個

請考慮以下示例: A.xsd包含三個類型a,b,c 而B.xsd包含兩個類型d,e。

當我輸入A.xsd在B.xsd類似以下內容:

<xs:import namespace="http://www.abc.com/schema/aaa" schemaLocation="A.xsd"/> 

我得到的所有三種類型的-a,b和c。我只想在B.xsd中輸入一個。我想在xsd中排除類型b和c。有可能這樣做嗎?如果是,有什麼選擇?

感謝 PC

+0

我從來沒有見過這樣的事情,我問自己這有什麼好處。某種類型的替換是否覆蓋? – OkieOth

+0

如果您只想輸入A,則可以將ns1:a類型擴展爲本地類型。 –

+0

感謝您輸入Petru和Micheal。我正在處理的場景是使用spring-ws的基於soap的web服務。它正在導入另一個定義了某些類型的xsd。好的部分是,我可以重用在A.xsd中定義的複雜類型。不好的部分是..我在最後的wsdl中獲得了不需要的額外類型。所以這就是我查看是否可以導入模式子集的原因。 –

回答

1

不,你不能做到這一點。但你爲什麼想要?剩餘未使用的類型肯定沒有危害?

0

解釋@Michael,No you can't do it.如上所述。如果您對某些規格閱讀感興趣,請描述this is where。至於爲什麼有人想這樣做,我可以提供一個我經常看到的例子。我沒有聲稱它適用於你的情況,但它應該幫助那些想知道爲什麼。這一切都始於大多數人對模式的期望:確切地驗證他們想要的內容,而不再是其他內容。然後,思維集假定如果XML是模式有效的,那麼在後面的代碼中沒有任何驗證或剩餘的驗證。這可能是人們可以看到如此多的問題的原因,即使是在這裏,也可以處理各種驗證場景,這似乎推動了人們想要用XSD做什麼。

我經常碰到的是那些建立自己或引用(如行業標準)這些精心設計的類型層次結構和替代組的人,要意識到儘管在企業模型中使用類似這樣的結構是有意義的,端到端視圖,企業內部的各個系統僅支持該類型層次結構的一個子集。

當的XSD是創作遵循一定的圖案爲開放內容(通過抽象元素或抽象的類型元素),則包括這些額外的類型或元件的模式經受通過具有一個xsi內容驗證:類型參考錯誤的類型或使用替換組的錯誤成員。

爲了說明,考慮基本抽象類型Address;具體地址:加拿大,美國,墨西哥,英國。例如。使用英國地址而不是加拿大/美國/墨西哥對於特定的商業服務無效。

在你的情況下,假設型ab和/或c,只有這樣,沒有依賴性做到這一點就是分裂A.xsdA」aA‘’與休息,然後在B.xsd處參考A'。有很多方法可以自動完成,所以從維護角度來看,開銷可能非常低。當通過自動XML模式重構(XSR)完成時,那麼未來版本的A.xsd(我認爲是不屬於你的東西)可以輕鬆地與解決方案的其餘部分集成。

+0

xs:重新定義是一個可怕的怪物,但它經常用於Petru描述的場景:您可以重新定義包含的模式文檔中的某些內容,以便英國地址變得無效。 –

相關問題