xsd - 如何在 XML 模式中指定必须存在两个字段之一?

标签 xsd

我想指定 fieldnamefreetext必须始终存在于适用于此 XSD 的 XML 文件中。有没有办法做到这一点?

<xs:complexType name="tSome">
<xs:sequence>
  <!-- either one of the two below has to be present. -->
  <xs:element name="fieldname" type="xs:string" />
  <xs:element name="freetext" type="xs:string" />
  <!-- this one below must always be present -->
  <xs:element name="dbtablename" type="xs:string" />
</xs:sequence>
</xs:complexType>

最佳答案

有一个Choice Indicator在 XML Schema 中,它允许您使用一个包含的元素,但不能使用两个或更多。如果你想要 3 中的任何 2,我建议做这样的事情:

<xs:choice>
  <xs:element name="fieldname" type="xs:string" minOccurs="0" maxOccurs="1" />
  <xs:element name="freetext" type="xs:string" minOccurs="0" maxOccurs="1" />
  <xs:element name="dbtablename" type="xs:string" minOccurs="0" maxOccurs="1" />
</xs:choice>
<xs:choice>
  <xs:element name="fieldname" type="xs:string" minOccurs="0" maxOccurs="1" />
  <xs:element name="freetext" type="xs:string" minOccurs="0" maxOccurs="1" />
  <xs:element name="dbtablename" type="xs:string" minOccurs="0" maxOccurs="1" />
</xs:choice>

(也许 maxOccurs 会阻止您选择同一个元素两次。)
如果那不起作用,我什么也不会想到。

已编辑 : 我第一次没有正确理解这个问题。如果你想要 dbtablename始终与 fieldname 中的任何一个一起在场或 freetext ,那么这就是答案:
<xs:complexType name="tSome">
<xs:sequence>
  <xs:choice>
    <xs:element name="fieldname" type="xs:string" />
    <xs:element name="freetext" type="xs:string" />
  </xs:choice>
  <xs:element name="dbtablename" type="xs:string" />
</xs:sequence>
</xs:complexType>

关于xsd - 如何在 XML 模式中指定必须存在两个字段之一?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2523750/

相关文章:

Android XML 架构验证

c# - 从 c# datetime 到 xsd :datetime

import - WCF : SvcUtil. exe 与导入问题

xsd - XML 架构 - 只有一个元素应该将属性设置为 true

c# - 为 XSD 文件的加载批量生成示例 xml

c# - 如何根据架构 (XSD) 验证 XML?出了点问题

xml - 扩展 XSD 文件

XMLDocument 节点没有值

xml - 在这种情况下如何添加唯一约束?

java - 如何针对 xsd 模式验证大 xml?