必填或可选字段的 XSD 架构

标签 xsd xsd-validation

如果 xsd 中的元素定义如下:

<element name="test" minOccurs="0" maxOccurs="1" type="string" />

这是否意味着: 1. 标签可以完全删除XML并且仍然不会出现任何验证错误 或者 2.标签可以为空/空白,没有任何值

这是定义强制/可选元素的最佳方法/实践。

谢谢 西宁

最佳答案

两者。

元素test可以省略。

元素 test 可以与任何字符串内容一起出现一次,包括空字符串:

<test/>

最佳实践?看你想表达什么。

minOccurs="0" 与结构有关。

如果你想表达数据级别的约束,你可以这样做:

<xs:element name="test" minOccurs="0" type="tns:nonEmptyString"/>

<xs:simpleType name="nonEmptyString">
  <xs:restriction base="xs:string">
    <xs:minLength value="1" />
  </xs:restriction>
</xs:simpleType>

因此,请考虑您的约束是否与结构(项目是否存在)或数据(项目是否具有空值)有关,并相应地应用。还有 nillable,但我什至不会开始讨论它们。

关于必填或可选字段的 XSD 架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28539139/

相关文章:

java 正则表达式模式匹配与模式验证

c# - 序列复杂类型中缺少必需元素时的 XSD 验证错误

xml - 使用 XSD 仅允许 XML 标记中的特定字符串

xsd - "Type [namespace:type] is not declared"尚未正确导入,我认为

spring - 应用程序上下文中 Spring Beans 模式的验证错误

php - Mysql从另一个表添加列(没有引用id)

java - Jaxb 不保留包中命名空间的大小写

.net - 如何根据 xml 模式更正 xml 文件?

使用 SDL Tridion 的 XSD 方面和指标

python - 如何使用 lxml 验证 XSD 架构,但忽略与给定模式匹配的元素?