java - XSD Schema 元素可以是两种类型之一
问题描述
我一直在环顾四周,真的没有简单的方法让一个元素成为两种可能的类型吗?我尝试了以下解决方法。
<xs:element name="food">
<xs:complexType>
<xs:choice>
<xs:element name="meat" type="meatFoods"/>
<xs:element name="veggies" type="veggieFoods"/>
</xs:choice>
</xs:complexType>
</xs:element>
food cannot have character [children], because the type's content type is element-only.
和:
<xs:choice>
<xs:sequence>
<xs:element name="food" type="meatFoods"/>
</xs:sequnce>
<xs:sequence>
<xs:element name="food" type="veggieFoods"/>
</xs:sequence>
</xs:choice>
给出关于相同名称不同类型的错误
和:
<xs:complexType name="MeatOrVeggies">
<xs:choice>
<xs:element name="meat" type="meatFoods"/>
<xs:element name="veggies" type="veggieFoods"/>
</xs:choice>
</xs:complexType>
<xs:element name="food" type="MeatOrVeggies"/>
food cannot have character [children], because the type's content type is element-only.
这些都会引发某种错误。最后一个给出 food 是一个元素,并且 no child allowed 错误,第二个给出“多个名为“food”的元素,不同类型出现在模型组中。”
此 XSD 是 java 有效负载对象的有效负载,它具有:
FoodInterface food
. Meat 和 Veggies 是该接口的枚举,如下所示:
public enum Meat implements FoodInterface{
Chicken,
Beef,
Pork
}
模式中的肉类/蔬菜枚举:
<xs:simpleType name="meatFoods">
<xs:restriction base="xs:string">
<xs:enumeration value="chicken"/>
<xs:enumeration value="beef"/>
<xs:enumeration value="pork"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="veggieFoods">
<xs:restriction base="xs:string">
<xs:enumeration value="spinach"/>
<xs:enumeration value="broccoli"/>
<xs:enumeration value="tomato"/>
</xs:restriction>
</xs:simpleType>
Thanks in advance.
解决方案
“......联合元素将简单类型定义为来自指定简单数据类型的值的集合(联合)......” 在这里查看:https ://www.w3schools.com/xml/el_union.asp
推荐阅读
- c++ - 通过基类引用派生类后打印的错误值
- html - 试图将 hr 标签彼此靠近
- sql-server - SSDT 通函参考:复杂项目
- python - 如何在 OpenCV 中提取具有特定颜色的图像片段?
- java - 不支持的major.minor 52.0 版,带有用eclipse 构建的web 应用程序,服务器是tomcat 7
- sas - 根据日期计算移动总和/平均值
- python - DRF 嵌套序列化器将表转换为结构化 json
- javascript - Cookie 文件不会传递到其他页面
- c# - 在 C# 中寻找正确的对象表示法来表示 JSON 样式的数据
- python-3.x - python3:将列表列表转换为列表字典