假设我们有以下模式(来自Microsoft示例):
<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>
序列是可选的,所以下面的所有元素都可以出现。
现在,如果我们有:
<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>
如果存在bear
和giraffe
元素,则必须存在。
到现在为止,我还好。
但是如果我们有这个(上面的例子和“现实生活”XSD的混合)呢?
<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"
一起使用?
发布于 2022-10-13 14:30:43
如果
元素
bear
和giraffe
存在,则必须存在。到现在为止,我还好
这可能是你需要调整你的理解的地方。
因为xs:sequence
是可选的,所以zooAmimals
可能仍然存在,而不存在任何elephant
、bear
或giraffe
。
如果序列是强制性的,为什么在元素中指定
minOccurs
,以及为什么有些元素可以与minOccurs="0"
一起使用?
您忽略了在游戏中有两个级别的发生约束:
xs:sequence
,出现约束共同应用于序列组。集体组可以是可选的、必需的,或者可以作为一个组重复。xs:sequence
的xs:element
子级,在考虑到xs:sequence
作为一个组的发生约束的情况下,发生约束分别适用于后的儿童。如果xs:sequence
是可选的,并且省略了组,那么单独的xs:element
约束就无关紧要了;否则,xs:element
事件约束就会控制每个xs:sequence
组事件中每个元素的出现情况。另请参阅
发布于 2022-10-13 15:27:21
在第一个例子中
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="elephant"/>
<xs:element name="bear"/>
<xs:element name="giraffe"/>
</xs:sequence>
你的元素必须分三组出现:大象,熊,长颈鹿,.
在第二个例子中,
<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开始。
(这让我想起了哥德尔,埃舍尔,巴赫……)
在第三个例子中
<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,但是你只能有一个这样的群,因为序列本身只能发生一次。
https://stackoverflow.com/questions/74056858
复制相似问题