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" /> 进入序列,但不能有两个具有相同名称和不同类型的元素.所以我认为我必须以其他方式解决它. 我发现这是: 这几乎是我想做的,但我不知道这是可能的. 提前致谢.
不,你不能这样做.一个选项是创建一个“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> 在一种情况下,您不能使单个标签(例如“发件人”)成为一件事,而在另一种情况下则不能使一个标签(一个标签必须具有一个定义良好的类型,并且具有该类型). 渣子 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |