2013-08-16 57 views
0

我的XML文件對子元素有限制,但是根元素的名稱並不重要。我怎樣才能將它融入我的XSD?我嘗試過使用<xs:any>,但我得到:如何編寫不關心根元素被調用的XSD?

「S4s-elt-invalid-content.1:'schema'的內容無效,元素'any'無效,放錯位置或經常出現。

於是,我錯過了名字從這樣的元素標籤:<xs:element>但後來我得到:

「S4S-ATT-必出現:屬性‘名’必須出現在元素‘元素’。」

回答

0

我想我可能只是要求更嚴格並堅持使用特定的標籤作爲根元素。應用程序不關心的事實並不是一個真正的問題。

對我來說似乎很奇怪,這個限制存在,但我是XSD新手。

+0

你的意思是什麼「限制」? –

+0

您必須指定根屬性的名稱的限制。 –

+0

我認爲你的意思是根元素。如果是這樣,那麼你似乎是在誤解之下勞動。您不僅不必在XSD模式中指定根元素的名稱,您不能*指定根元素的名稱:XSD沒有用於約束文檔根元素名稱的構造。這是許多人抱怨的XSD的設計特徵。如前所述,XSD的命名類型爲您描述的場景提供直接支持。 「限制」是你想象力的一種表現。 –

1

使用指定的類型,並告訴驗證程序在使用該類型的根元素處開始驗證。 (這有一個可能的問題:XSD 1.0建議作爲一個可能的調用選項,但不要求驗證器提供它,所以不能保證你使用的驗證器接口將支持它,取決於你的驗證器。值得一試,至少)

另一種方法來說明這一點:你已經有了你所要求的,因爲你的XSD架構從來沒有關心什麼是你的文檔實例的根元素被調用。 XSD模式提供了一組元素和類型聲明(等等)。驗證器可以被要求在文檔中的任何一點開始驗證,不僅僅是根,也可以是元素聲明或類型聲明,也可以是'鬆散通配符模式'(最常見的默認值)。如果你的驗證器沒有提供你想要的調用選項,那麼這是你選擇驗證器的一個缺陷,而不是XSD的缺陷。

+0

我不確定我們對驗證程序有多少控制,所以感謝您的建議,但可能不是我們要求的一個好選擇。 –

+0

您正在調用驗證程序,但您無法控制驗證程序的調用方式?我想知道你是如何得到這種情況的。 –