加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

xml – xsd相同的元素,不同的类型?

发布时间:2020-12-16 07:52:06 所属栏目:百科 来源:网络整理
导读:我有一种情况,XSD中的 XML文件中的元素可以有两种不同的类型. 我想做的是首先将输入的值验证为更严格的类型(如果它是填写表单的人),并且如果没有通过,则将其验证为较不严格的类型(如果它是一个组织,填写表单),否则让验证失败,如果它根本没有验证. 所以这基本
我有一种情况,XSD中的 XML文件中的元素可以有两种不同的类型.

我想做的是首先将输入的值验证为更严格的类型(如果它是填写表单的人),并且如果没有通过,则将其验证为较不严格的类型(如果它是一个组织,填写表单),否则让验证失败,如果它根本没有验证.

所以这基本上是这样的:

<xsd:complexType name="ForminfoType"> `
    <xsd:sequence>
        <xsd:element name="formname" type="xsd:string" />
        <xsd:element name="timestamp" type="xsd:dateTime" />
        <xsd:element name="sender" type="PersonType" minOccurs="0" />
        <xsd:element name="receiver" type="OrganizationType" minOccurs="0" />
        <xsd:element name="signature" type="xsd:string" minOccurs="0" />
    </xsd:sequence>
</xsd:complexType>

PersonType声明的基本上是根据特定模式构建的12位数字.组织类型声明的基本上只是一个10位数字.

所以我在逻辑上想做的是把这个:

<xsd:element name="sender" type="OrganizationType" minOccurs="0" />

进入序列,但不能有两个具有相同名称和不同类型的元素.所以我认为我必须以其他方式解决它.

我发现这是:
http://xsd.stylusstudio.com/2007Oct/post05003.htm

这几乎是我想做的,但我不知道这是可能的.
有没有人有任何进一步的想法如何解决这个问题?

提前致谢.

不,你不能这样做.一个选项是创建一个“PersonOrOrgSender”复合类型,方式如下:
<xsd:complexType name="PersonOrOrgType">
    <xsd:choice>
      <xsd:element minOccurs="0" name="PersonSender" type="PersonType" />
      <xsd:element minOccurs="0" name="OrgSender" type="OrganizationType" />
    </xsd:choice>
  </xsd:complexType>

然后使您的“发件人”成为该类型的实例:

<xsd:element name="sender" type="PersonOrOrgType" minOccurs="0" />

但是你会有这样的XML数据:

<FormInfo>
  <formname>string</formname>
  <sender>
    <OrgSender>
      <Name>string</Name>
    </OrgSender>
  </sender>  
  ...
</FormInfo>

要么

<FormInfo>
  <formname>string</formname>
  <sender>
    <PersonSender>
      <Name>string</Name>
    </PersonSender>
  </sender>  
  ...
</FormInfo>

在一种情况下,您不能使单个标签(例如“发件人”)成为一件事,而在另一种情况下则不能使一个标签(一个标签必须具有一个定义良好的类型,并且具有该类型).

渣子

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读