xml - 如何为XSD中的不同元素指定具有相同名称但不同值的元素?
问题描述
我在 XML 中有一个元素,其值可以根据它所属的元素而有所不同。例如,考虑下面的 XML 代码
<element1>
<action></action> //here action can have value -> add, delete
</element1>
<element2>
<action></action> //here action can have value -> attach, detach
</element2>
<element3>
<action></action> //here action can have value -> add, delete, attach, detach
</element3>
我需要为此编写 XSD,但我在某处读到这种场景不能用 XSD 编写。任何帮助将不胜感激。
(编辑) 我的 xsd 中需要这样的东西。(以下 XSD 不正确)
<xs:element name="e1">
<xs:complexType>
<xs:element name="action">
<xs:sequence>
<xs:restriction base="xs:string">
<xs:enumeration value="Add"/>
<xs:enumeration value="Delete"/>
</xs:restriction>
</xs:sequence>
</xs:element>
</xs:complexType>
</xs:element>
<xs:element name="e2">
<xs:complexType>
<xs:element name="action">
<xs:sequence>
<xs:restriction base="xs:string">
<xs:enumeration value="Attach"/>
<xs:enumeration value="Detach"/>
</xs:restriction>
</xs:sequence>
</xs:element>
</xs:complexType>
</xs:element>
解决方案
XSD 允许局部元素声明和全局声明,局部声明可以有不同的类型:
<xs:element name="e1">
<xs:complexType>
<xs:sequence>
<xs:element name="action" type="xs:integer"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="e2">
<xs:complexType>
<xs:sequence>
<xs:element name="action" type="xs:dateTime"/>
</xs:sequence>
</xs:complexType>
</xs:element>
但是,如果两个action
元素可以是彼此的兄弟,那么它们必须具有相同的类型(这种约束称为“元素声明一致”)。例如,您不能有一个元素有两个名为的子元素,action
其中第一个是 an xs:integer
,第二个是 an xs:dateTime
。
推荐阅读
- c - 如果 POSIX 套接字“读取”函数返回 0,是否表明发生了错误?
- c++ - 可变参数宏中的模板推导失败
- xcode - Catalina - 无法安装 Cocoapods
- c# - 不能隐式转换类型
- c# - 粒子系统,在使用 Play() 和 Stop() 函数时,构建后不起作用
- javascript - 尝试创建一个添加功能,因此当我单击添加按钮时,它会将项目添加到项目符号列表并在其旁边创建一个复选框
- layout - 从 JasperReports Server v 6.3 升级到 v 7.5 后的布局问题
- javascript - Drupal 分类中的国家代码显示为标志
- android - 使用 JNI 从 c++ 回调到 Kotlin:Android
- python - 多个数据帧之间的相关性如何?蟒蛇熊猫