【问题标题】:Require XML element in XSD when another element has certain value?当另一个元素具有特定值时,需要 XSD 中的 XML 元素吗?
【发布时间】:2019-01-28 11:14:06
【问题描述】:

我只有选择枚举的特定值才需要一个必需的属性或元素。示例如下:

  <xs:element name="TYPE" type="TestEnum" />
   <!-- // This Element should only required when TYPE = INTERNATIONAL -->
   <xs:element name="IBAN"/>

 </xs:complexType>
<xs:simpleType name="TestEnum">
    <xs:restriction base="xs:string">
        <xs:enumeration  value="NATIONAL"/>
        <xs:enumeration value="INTERNATIONAL"/>
    </xs:restriction>
</xs:simpleType>

【问题讨论】:

  • 除了 XSD 片段的一些结构性问题之外,您请求的约束类型通常需要 XSD 1.1 的条件类型分配或断言构造。 XSD 1.1 适合您吗?
  • 感谢您的回答。是的,这对我来说是一个选项。这个约束是什么样子的?

标签: xml xsd xsd-validation xml-validation xsd-1.1


【解决方案1】:

XSD 1.1

TYPE = 'INTERNATIONAL' 时,如何使用xs:assert 使IBAN 成为强制:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
           vc:minVersion="1.1">

  <xs:element name="root">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="TYPE" type="TestEnum" />
        <!-- // This Element should only required when TYPE = INTERNATIONAL -->
        <xs:element name="IBAN" minOccurs="0"/>        
      </xs:sequence>
      <xs:assert test="not(TYPE = 'INTERNATIONAL') or IBAN"/>
    </xs:complexType>
  </xs:element>

  <xs:simpleType name="TestEnum">
    <xs:restriction base="xs:string">
      <xs:enumeration  value="NATIONAL"/>
      <xs:enumeration value="INTERNATIONAL"/>
    </xs:restriction>
  </xs:simpleType>

</xs:schema>

【讨论】:

  • 嘿...我喜欢它并且它有效。是时候进入 Schema 1.1 了!非常感谢你...
猜你喜欢
  • 1970-01-01
  • 2015-03-09
  • 2022-11-28
  • 1970-01-01
  • 2011-05-06
  • 2018-04-19
  • 1970-01-01
  • 1970-01-01
  • 2022-10-15
相关资源
最近更新 更多