gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 01:40:00 29 4
gpt4 key购买 nike

我的情况是 XML 文件中的元素在 XSD 中可以是两种不同的类型。

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

基本上就是这样:

<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 位数字。 Organization 类型声明的基本上只是一个 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>

您不能使单个标签(例如“发件人”)在一种情况下是一回事,而在不同情况下是另一回事 - 一个标签必须恰好具有一个明确定义的类型,并且一劳永逸。

马克

关于xml - xsd 相同的元素,不同的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1306305/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com