gpt4 book ai didi

java - XSD 中元素类型的“OR”运算

转载 作者:行者123 更新时间:2023-12-02 10:45:51 25 4
gpt4 key购买 nike

这是 My question 的连续性

假设下面是我的 xsd 文件,

更新的 XSD 文件

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.com/wm" xmlns="http://www.example.com/wm" elementFormDefault="qualified" version="1.0">
<xsd:include schemaLocation="Comm.xsd" />
<xsd:element name="testEame1">
<xsd:annotation>
<xsd:documentation> test </xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="id" type="xsd:string" minOccurs="1" />
<xsd:element name="session" type="rawSess" minOccurs="1" />
</xsd:sequence>
<xsd:attribute name="pid" type="xsd:integer" use="required" />
<xsd:attribute name="version" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:schema>

引用另一个已定义类型的 XSD,

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" targetNamespace="http://www.example.com/wm" xmlns="http://www.example.com/wm" elementFormDefault="qualified">
<xsd:complexType name="rawSess">
<xsd:sequence>
<xsd:element name="oldSessionVersion" type="Sessiontype1" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="sessInfo">
<xsd:sequence>
<xsd:element name="newSessionVersion" type="Sessiontype2" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="Sessiontype1">
<xsd:sequence>
<xsd:element name="ele1" type="xsd:string" minOccurs="0" />
<xsd:element name="ele2" type="xsd:string" />
<xsd:element name="ele3" type="xsd:string" minOccurs="0" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="Sessiontype2">
<xsd:sequence>
<xsd:element name="nele1" type="xsd:integer" minOccurs="0" />
<xsd:element name="nele2" type="xsd:integer" />
<xsd:element name="nele3" type="xsd:integer" minOccurs="0" />
</xsd:sequence>
</xsd:complexType>
</xsd:schema>

在上面的 xml 中,对于 element session ,我希望它只有两种类型,如下所示。 sessInfo 或 rawSess

<xsd:element name="session" type='sessInfo| rawSess' minOccurs="1"/>

更新说明: userDefinedtypes 是复杂类型。

如何配置我的 xsd 来实现此目的

最佳答案

如果userDefinedType1userDefinedType2是简单原子类型,则定义一个联合类型:

<xs:element name="session" type="one-or-two"/>

<xs:simpleType name="one-or-two">
<xs:union memberTypes="userDefinedType1 userDefinedType2"/>
</xs:simpleType>

我们现在知道它们实际上是复杂类型。定义类型

<xs:complexType name="eitherType">
<xs:choice>
<xs:sequence>... content model of alternative 1</xs:sequence>
<xs:sequence>... content model of alternative 2</xs:sequence>
</xs:choice>
</xs:complexType>

并从元素声明中引用此类型。

注意:只有在没有歧义的情况下,这才有效,也就是说,如果 validator 可以根据在实例文档中看到的第一个元素名称来计算出选择的哪个分支。例如,如果您在两个都以 h1 元素开头的内容模型之间进行选择,则您必须重新组织内容模型以消除歧义。

关于java - XSD 中元素类型的“OR”运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52588529/

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