0

鉴于:

<xs:complexType name="SymbolsList" final="">
    <xs:sequence>
        <xs:element name="symbol" maxOccurs="unbounded">
            <xs:complexType>
                <xs:attribute name="name" type="xs:string" />
            </xs:complexType>
        </xs:element>
    </xs:sequence>
</xs:complexType>
<xs:complexType name="ComboList">
    <xs:sequence>
        <xs:element name="combo" maxOccurs="unbounded">
            <xs:complexType>
                <xs:sequence>
                    <xs:element name="symbol" maxOccurs="unbounded">
                        <xs:complexType>
                            <xs:attribute name="name" type="xs:string" />
                        </xs:complexType>
                    </xs:element>
                </xs:sequence>
                <xs:attribute name="comboName" type="xs:string" />
            </xs:complexType>
        </xs:element>
    </xs:sequence>
</xs:complexType>
<xs:element name="symbolsList" type="SymbolsList">
  <xs:unique name="uniqueSymbol">
    <xs:selector xpath="./symbol" />
    <xs:field xpath="@name" />
  </xs:unique>
</xs:element>
<xs:element name="combosList" type="ComboList">
  <xs:unique name="uniqueCombo">
    <xs:selector xpath="./combo" />
    <xs:field xpath="@comboName" />
  </xs:unique>
</xs:element>

我相信这定义了一个符号列表和这些符号的组合列表。交易品种列表中的每个条目都必须有一个唯一的名称,并且组合列表中的每个条目都必须有一个唯一的 comboName。我想知道的是,我是否有办法将 combosList 序列中允许出现的次数限制为至少符号列表中定义的符号数。

我想我在问基数限制是否可以是可变的,如果可以,如何关联它的限制?

我还想让 comboList 元素(单个组合)只能使用 symbolList 元素中定义的符号名称。

我想我可以拉出最后一部分。我在任何地方都找不到任何关于将不同元素序列的基数限制为大于或等于一个或另一个的内容。

也许这是不可能的。

4

1 回答 1

0

XSD 要求在声明中逐字指定约束的基数;您想到的那种动态计算不在 XSD 的设计空间中。

在 XSD 1.1 中,您可以向 SymbolsList 和 CombosList 的一些共同祖先添加一个断言,这需要

count(CombosList/combo) ge count(SymbolsList/symbol)

Saxon EE 和 Xerces J 支持 XSD 1.1(在后一种情况下,您必须查找 1.1 发行版,或者我最后一次查找)。(一个警告:请注意,Xerces J 不支持断言中的所有 XPath 2.0,而且我实际上还没有检查此断言是否包含在符合 1.1 实现的 XPath XSD 的最小子集内。在下沉之前进一步调查这里有很多时间。)

于 2012-12-20T17:46:10.150 回答