XSD指定一个表(所有元素)应该被完全填满或完全不填?

问题描述 投票:1回答:1

我正在寻找一种解决方案,在XML 1.0的约束条件下,在XSD模式中指定一个表应该被完全填满或完全不填满。这个表是可选的,只有在适用的情况下才需要填充,但如果适用,表中的所有元素都是强制性的。我试过用以下方式指定表格 minOccurrences = "0" 和表中的元素与 minOccurrences = "1"但我总是要为这些元素提供一个值。

xml xsd xsd-validation xml-validation
1个回答
1
投票

该表是可选的

所以, minOccurs="0" 的表元素上。

并且只需要在适用的时候填写

一些适用性约束在XSD 1.0中是不可表达的。

如果您可以升级到XSD 1.1,您可以使用断言来指定表单元格可以或不可以为空的标准。

但如果适用的话,表中的所有元素都是强制性的。

如果唯一的适用性约束是表单元格必须有内容,你可以通过简单的 minOccurs="0" 摆在桌上 minOccurs="1" 上的单元格。 所以,如果表在那里,单元格必须在那里。 你也可以要求单元格是非空的。 所有这些都可以在XSD 1.0中完成。

更复杂的适用性约束可能需要XSD 1.1的断言。

请看 本回答 关于如何使用 xs:assert 来指定条件,通过 every...satisfies 表单元格上必须为真。


0
投票

你也可以对属性和元素设置限制。

属性限制的例子--

<xsd:element name="remove">
<xsd:complexType>                        
    <xsd:attribute name="ref" use="optional"/>
    <xsd:attribute name="uri" use="optional"/>
    <xsd:assert test="(@ref and not(@uri)) or (not(@ref) and @uri)"/>            
</xsd:complexType>

元素限制的例子 -

<xs:complexType name="IfBlockType">
<xs:sequence>
  <xs:element type="IfType" name="If"/>
  <xs:choice maxOccurs="unbounded" minOccurs="0">
    <xs:element type="ElseIfType" name="ElseIf"/>
  </xs:choice>
  <xs:choice maxOccurs="1" minOccurs="0">
    <xs:element type="ElseType" name="Else"/>
  </xs:choice>
</xs:sequence>

© www.soinside.com 2019 - 2024. All rights reserved.