首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将xsd中的元素定义为强制性/可选性和任何顺序

如何将xsd中的元素定义为强制性/可选性和任何顺序
EN

Stack Overflow用户
提问于 2014-11-20 15:36:03
回答 3查看 429关注 0票数 1

我无法为以下需求用<xsd:all>定义元素,

我收到了maxOccursv should be 0 or 1 under schemaall`的错误。

以下是我的要求,能请任何人尽快帮助我吗?

  1. 元素(A & B)可以在xml中按任何顺序排列(所以我使用的是xsd:all,但是gettting错误),我不想使用序列。
  2. 元素A是强制性的,它应该总是出现在xml中,但是元素B是可选的。
  3. 元素A & B可以出现任意次数,例如,我可以让元素A出现10次,元素B出现20次。

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="InvoiceData">
        <xsd:complexType>
            <xsd:all>
                <xsd:element name="A" minOccurs="1" maxOccurs="unbounded" >
                <xsd:element name="B" minOccurs="0" maxOccurs="unbounded" >
            </xsd:all>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>
EN

回答 3

Stack Overflow用户

发布于 2014-11-20 23:48:53

在XSD1.1中,您可以使用xs:所有的maxOccurs值都不是0或1。

在XSD1.0中,你能得到的最接近的是模型(A_~**,但是你不能对A和B施加不同的maxOccurs值。

票数 1
EN

Stack Overflow用户

发布于 2014-11-23 01:36:53

正如凯博士所说,在XSD1.0中,您不能使用<xsd:all>来解决这样的问题。相反,您需要修改您的答案,以使用序列和选择。

这个XSD1.0代码应该符合您的三项要求: order是免费的,<A>是强制性的,最大发生的时间都是无限的。

代码语言:javascript
运行
复制
<xsd:element name="InvoiceData" >
    <xsd:complexType>
        <xsd:choice>
            <xsd:sequence>
                <xsd:element name="B" minOccurs="0"/>
                <xsd:element name="A"/>
            </xsd:sequence>
            <xsd:choice minOccurs="0" maxOccurs="unbounded">
                <xsd:element name="A"/>
                <xsd:element name="B"/>
            </xsd:choice>
        </xsd:choice>
    </xsd:complexType>
</xsd:element>
票数 1
EN

Stack Overflow用户

发布于 2014-11-25 02:37:08

如果我正确理解这个问题,您需要A和B元素的混合;A必须至少出现一次,B根本不需要出现;两者都没有最大值。(如果迈克尔·凯( Michael )认为你确实想把最大数量的数量强加于A和B,那事情就变得更复杂了。)

在DTD表示法中,(a*, (b, a*)+)发挥了作用。用XSD符号表示:

代码语言:javascript
运行
复制
<xsd:sequence>
  <xsd:element ref="A" 
               minOccurs="0" 
               maxOccurs="unbounded"/>
  <xsd:sequence maxOccurs="unbounded">
    <xsd:element ref="B"/> 
    <xsd:element ref="A" 
                 minOccurs="0" 
                 maxOccur="unbounded"/>
  </
</
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27043465

复制
相关文章

相似问题

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