首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XSD :如何验证这个xml,序列取决于第一个xml的值?

XSD :如何验证这个xml,序列取决于第一个xml的值?
EN

Stack Overflow用户
提问于 2017-03-29 11:37:57
回答 1查看 40关注 0票数 0

我有3种XML块,不包含"filter“块或带有”失效“的"filter”块,其第一个值为"fixed1“或"fixed2";if "fixed1":nothing,if "fixed2",这个序列A1,A2,A3 (见下文):

代码语言:javascript
复制
        <filter>
          <invalidation>fixed1</invalidation>
        </filter>

        <filter>
          <invalidation>fixed2</invalidation>
          <A1>string...</A1>
          <A2>string...</A2>
          <A2>string...</A3>
        </filter>

如何验证这一点?我觉得有一些使用xs:选择的解决方案,但我找不到。

我找到的唯一(糟糕的)解决方案是:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
...
<xs:simpleType name="invalidation">
  <xs:restriction base="xs:string">
    <xs:pattern value="fixed1|fixed2"/>
  </xs:restriction>
</xs:simpleType>
...
<xs:element name="filter" minOccurs="0">
  <xs:complexType>
    <xs:all>
      <xs:element name="invalidation" type="invalidation"/>
      <xs:element name="A1" type="xs:string" minOccurs="0"/>
      <xs:element name="A2" type="xs:string" minOccurs="0"/>
      <xs:element name="A3" type="xs:string" minOccurs="0"/>
    </xs:all>
  </xs:complexType>
</xs:element>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-29 15:03:00

这在XSD1.0中是无法做到的。

它可以在XSD1.1中使用断言完成。使用内容模型(invalidation, (A1, A2, A3)?)将结构定义为序列,然后定义断言:not(invalidation='fixed1' and exists(A1))

Altova、Saxon和Apache支持XSD1.1,但在其他产品(如Java和.NET中的内置验证器)中则不支持XSD1.1。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43092399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档