首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在xsd:sequence上的minOccurs/maxOccurs对xsd:element?

在xsd:sequence上的minOccurs/maxOccurs对xsd:element?
EN

Stack Overflow用户
提问于 2022-10-13 13:46:19
回答 2查看 57关注 0票数 1

假设我们有以下模式(来自Microsoft示例):

代码语言:javascript
运行
复制
<xs:element name="zooAnimals">
  <xs:complexType>
        <xs:sequence minOccurs="0" maxOccurs="unbounded">
           <xs:element name="elephant"/>
           <xs:element name="bear"/>
           <xs:element name="giraffe"/>
        </xs:sequence>
  </xs:complexType>
</xs:element>

序列是可选的,所以下面的所有元素都可以出现。

现在,如果我们有:

代码语言:javascript
运行
复制
<xs:element name="zooAnimals">
  <xs:complexType>
        <xs:sequence minOccurs="0" maxOccurs="unbounded">
           <xs:element name="elephant" minOccurs="0" maxOccurs="1"/>
           <xs:element name="bear" minOccurs="1" maxOccurs="unbounded"/>
           <xs:element name="giraffe" minOccurs="1" maxOccurs="1"/>
        </xs:sequence>
  </xs:complexType>
</xs:element>

如果存在beargiraffe元素,则必须存在。

到现在为止,我还好。

但是如果我们有这个(上面的例子和“现实生活”XSD的混合)呢?

代码语言:javascript
运行
复制
<xs:element name="zooAnimals">
  <xs:complexType>
        <xs:sequence minOccurs="1" maxOccurs="1">
           <xs:element name="elephant" minOccurs="1" maxOccurs="1"/>
           <xs:element name="bear" minOccurs="0" maxOccurs="1"/>
           <xs:element name="giraffe" minOccurs="0" maxOccurs="1"/>
        </xs:sequence>
  </xs:complexType>
</xs:element>  

如果序列是强制性的,为什么在元素中指定minOccurs,以及为什么某些元素可以与minOccurs="0"一起使用?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-10-13 14:30:43

如果

元素beargiraffe存在,则必须存在。到现在为止,我还好

这可能是你需要调整你的理解的地方。

因为xs:sequence是可选的,所以zooAmimals可能仍然存在,而不存在任何elephantbeargiraffe

如果序列是强制性的,为什么在元素中指定minOccurs,以及为什么有些元素可以与minOccurs="0"一起使用?

您忽略了在游戏中有两个级别的发生约束:

  1. On xs:sequence,出现约束共同应用于序列组。集体组可以是可选的、必需的,或者可以作为一个组重复。

  1. 关于xs:sequencexs:element子级,在考虑到xs:sequence作为一个组的发生约束的情况下,发生约束分别适用于后的儿童。如果xs:sequence是可选的,并且省略了组,那么单独的xs:element约束就无关紧要了;否则,xs:element事件约束就会控制每个xs:sequence组事件中每个元素的出现情况。

另请参阅

票数 2
EN

Stack Overflow用户

发布于 2022-10-13 15:27:21

在第一个例子中

代码语言:javascript
运行
复制
   <xs:sequence minOccurs="0" maxOccurs="unbounded">
       <xs:element name="elephant"/>
       <xs:element name="bear"/>
       <xs:element name="giraffe"/>
   </xs:sequence>

你的元素必须分三组出现:大象,熊,长颈鹿,.

在第二个例子中,

代码语言:javascript
运行
复制
<xs:sequence minOccurs="0" maxOccurs="unbounded">
   <xs:element name="elephant" minOccurs="0" maxOccurs="1"/>
   <xs:element name="bear" minOccurs="1" maxOccurs="unbounded"/>
   <xs:element name="giraffe" minOccurs="1" maxOccurs="1"/>
</xs:sequence>

每组由零头大象、任意数量的熊和一只长颈鹿组成。所以你可能有E,B,G,B,B,G,但是你不能有E,B,G,因为A,G结束了,下一组必须从E或B开始。

(这让我想起了哥德尔,埃舍尔,巴赫……)

在第三个例子中

代码语言:javascript
运行
复制
<xs:sequence minOccurs="1" maxOccurs="1">
   <xs:element name="elephant" minOccurs="1" maxOccurs="1"/>
   <xs:element name="bear" minOccurs="0" maxOccurs="1"/>
   <xs:element name="giraffe" minOccurs="0" maxOccurs="1"/>
</xs:sequence>

序列不能重复。你可以有E或者E,E或者E,但是你只能有一个这样的群,因为序列本身只能发生一次。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74056858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档