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

我有一种情况,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>

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

渣子

相关文章

php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念