我有一种情况,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”复合类型,方式如下:
原文链接:https://www.f2er.com/xml/292755.html<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>
在一种情况下,您不能使单个标签(例如“发件人”)成为一件事,而在另一种情况下则不能使一个标签(一个标签必须具有一个定义良好的类型,并且具有该类型).
渣子