我有以下架构声明:
<element name="container">
<complexType>
<choice minOccurs="0" maxOccurs="unbounded">
<element name="action" minOccurs="0" maxOccurs="1" />
<element name="query" minOccurs="0" maxOccurs="unbounded" />
<element name="validator" minOccurs="0" maxOccurs="unbounded" />
</choice>
</complexType>
</element>
Run Code Online (Sandbox Code Playgroud)
我基本上想要<container>包含所需数量<query>或<validator>元素,但只包含一个<action>元素(可能没有).
据我所知,我不能把maxOccurs放在<choice>技术上,因为这个选择可以无限次地进行(由于查询和验证器上没有遮挡).
但是,这个XML在Eclipse中被认为是有效的(这可能只是Eclipse验证中的一个问题,尽管所有其他位工作正常)
<container>
<action id="action1" name="action1" />
<action id="action2" name="action2" />
<query id="query1" />
<validator id="testValidator" />
</container>
Run Code Online (Sandbox Code Playgroud)
不确定我是否遗漏了一些明显的东西.
C. *_*een 12
您当前的模型定义了(a)一个action元素或无元素,(b)零个或多个query元素,或(c)零个或多个validator元素之间的选择,然后允许该选择重复零次或多次.因此它相当于
<choice minOccurs="0" maxOccurs="unbounded">
<element name="action"/>
<element name="query"/>
<element name="validator"/>
</choice>
Run Code Online (Sandbox Code Playgroud)
这允许零个或多个元件的每一个是一个的任何序列action,一个query,或一个validator元件.
您可以使用以下代码sequence来满足您制定的要求choice:
<sequence>
<element name="action" minOccurs="0" maxOccurs="1" />
<element name="query" minOccurs="0" maxOccurs="unbounded" />
<element name="validator" minOccurs="0" maxOccurs="unbounded" />
</sequence>
Run Code Online (Sandbox Code Playgroud)
有时,不同类型的元素出现的顺序传达信息,因此有必要允许它们混合.在这种情况下,问题类似于以下reqular-expression问题:编写一个正则表达式,定义由'a','q'和'v'组成的字符串集,其中'a'最多出现一次.一个明显的正则表达式是(q|v)*(a(q|v)?).类似的XSD模型组是:
<sequence>
<choice minOccurs="0" maxOccurs="unbounded">
<element ref="query"/>
<element ref="validator"/>
</choice>
<sequence minOccurs="0">
<element name="action"/>
<choice minOccurs="0" maxOccurs="unbounded">
<element ref="query"/>
<element ref="validator"/>
</choice>
</sequence>
</sequence>
Run Code Online (Sandbox Code Playgroud)
(我已经从局部元素声明更改为元素引用,以避免必须声明query和validator每次两次.)
在XSD 1.1中,应该可以与all组获得相同的效果:
<all>
<element name="action" minOccurs="0" maxOccurs="1" />
<element name="query" minOccurs="0" maxOccurs="unbounded" />
<element name="validator" minOccurs="0" maxOccurs="unbounded" />
</all>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8318 次 |
| 最近记录: |