xml - XML Schema:使用之间的区别而不是当 minOccurs="0"
问题描述
这之间有什么区别(取自 w3schools.com 参考<xs:all>
):
<xs:element name="person">
<xs:complexType>
<xs:all>
<xs:element name="firstname" type="xs:string" minOccurs="0"/>
<xs:element name="lastname" type="xs:string" minOccurs="0"/>
</xs:all>
</xs:complexType>
</xs:element>
和这个:
<xs:element name="person">
<xs:complexType>
<xs:element name="firstname" type="xs:string" minOccurs="0"/>
<xs:element name="lastname" type="xs:string" minOccurs="0"/>
</xs:complexType>
</xs:element>
请注意每个子元素包含minOccurs="0"
,并注意第二个示例中缺少<xs:all>
标记。
据我了解,如果子元素未指定minOccurs="0"
,则<xs:all>
使其整个组根本无法出现。而不使用<xs:all>
意味着所有子元素都必须出现一次,因为元素中的minOccurs
and的默认值为maxOccurs
1。
但是,当您确实指定minOccurs="0"
所有子元素时,两个示例不是相同的约束吗?不都意味着每个元素都可以出现一次或不出现吗?
我没有看到这个<xs:all>
元素有多大用处。也许你可以告诉我它在哪里有用。
解决方案
您的第二个示例不是有效的 XSD,因为xs:element
不能作为xs:complexType
. 假设您的第二个示例实际上是
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string" minOccurs="0"/>
<xs:element name="lastname" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
然后,我们可以解释何时使用 which 如下:
xs:sequence
当元素排序很重要时使用。xs:all
当元素排序无关紧要时使用。
在这两种情况下,都minOccurs="0"
表示关联元素是可选的。
因此,在您的(固定)情况下,您的xs:all
示例将允许firstname
并以任何顺序lastname
显示为子项;person
您的xs:sequence
示例将限制firstname
在之前 lastname
作为person
.
推荐阅读
- sql - 如何从 putty 杀死在 oracle db 服务器上运行的进程?
- angular - 我无法安装 Angular 项目:npm install -g @angular/cli
- ajax - 使用 AJAX 从表单获取上传的文件和表单数据并发布到 Laravel 后端时出错
- dart - 在 Flutter 中更改图像的背景颜色
- python - 如何写入和读取每行python的csv文件
- python - 在 mySQL 中对数据进行排序
- mysql - Mysql Laravel:将图像链接存储为数组或使用外键创建新表?
- scala - java.net.ConnectException: General SSLEngine problem
- python - CSV writer - 在脚本运行时写入 csv 但不保存
- javascript - 使用ajax将数据插入数据库时如何显示警报消息?