2012-12-20 39 views
0

考虑:XML模式:限制出现于同级元素序列基数

<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> 

我相信这个定义的符号列表和这些符号的组合的列表。 符号列表中的每个条目必须具有唯一的名称,并且组合名单中的每个条目都必须具有唯一的组合名称。 我想知道的是,如果有方法可以将combosList序列中允许的出现次数限制为至少符号列表中定义的符号数量。

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

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

我想我可以拉最后一部分。我无法找到任何关于将不同元素序列的caridinal大小限制为大于或等于一个或另一个的任何地方。

也许这是不可能的。

回答

0

XSD要求基数约束在字面上在声明中指定;您所考虑的动态计算类型不在XSD的设计空间中。

在XSD 1.1,你可以断言添加到SymbolsList和CombosList的一些共同的祖先,需要

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

XSD 1.1由撒克逊EE和Xerces的Ĵ支持(在后一种情况下,你必须寻找1.1发行版,或者最后我看了)。 (一个注意事项:请注意,Xerces J不支持断言中的所有XPath 2.0,并且我没有真正检查过这个断言是否被XPath XSD的最小子集所覆盖,因为它符合1.1实现的要求。很多时候在这里)。

+0

现在我在Windows中使用LiquidXML工具,并在linux中编译这些工具的输出。 liquidXML是否允许XSD 1.1? – sbrett