簡體   English   中英

如何允許我的復雜類型中的任何類型的元素排除導入模式中的類型/元素

[英]How to allow elements of any type in my complex type excluding the types/elements from imported schemas

我正在編寫一個xml模式(讓我們說A),然后導入另一個模式(讓我們說B)。 我有一個復雜的類型(可以說它命名為CT),它列出了B中定義的元素的序列/選擇。我想允許序列/選擇中的任何元素,但要明確列出其中的一些。 我怎么做 ? 例如

<xs:schema xmlns:b="http://B" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:a="http://A" targetNamespace="http://A">
        <xs:import namespace="http://B"/>
                <xs:complexType name="CT">
                    <xs:sequence minOccurs="0" maxOccurs="unbounded"> <!-- using choice is a possible option -->
                        <xs:element ref="b:e1" minOccurs="0"/>
                        <xs:element ref="b:e2" minOccurs="0"/>
                        <xs:element ref="b:e3" minOccurs="0"/>
                        <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
                    </xs:sequence>
                </xs:complexType>
    </xs:schema>

這種模式的問題在於它是模棱兩可的。 驗證不會通過,因為“ ## other”命名空間允許使用與A =>不同的任何命名空間,可以使用B中的元素,但是其中一些元素已經在選擇/序列中聲明,這就是歧義的來源。

注意:B:e1,B:e2,B:e3的順序未定義。

有人會問“為什么要這么做”

因為我正在使用JAXB從此xml模式生成一些類。 我知道元素B:e1,B:e2,B:e3很可能會在那里,並且我為它們提供了特殊的工作流程(因此我需要為它們每個使用Java對象表示),而我真的不必處理其他的可能的元素(但應該允許)。

注意:我不能使用include代替import,因為B模式是預定義的並且針對不同的名稱空間。

有人知道如何從## other中排除B嗎? 歡迎任何其他解決方案。

謝謝。

這在XSD 1.1中非常簡單,因為在1.1中,當通配符與xsd:element元素競爭時,xsd:element元素將獲勝。 (在1.0中,您演示的模式違反了“唯一粒子歸因”(即確定性)規則。)

當前,Altova,Saxon和Xerces(按字母順序)支持XSD 1.1。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM