xml - 如何根据父标签对相同的复杂类型应用不同的限制
问题描述
我想达到下面显示的场景,其中我有相同的元素(在本例中为组件)和不同的父母。我只想对 < component > 的第一级添加限制。例如,我想添加颜色(在组件下)只能是黄色或绿色但 < component-set > 下的颜色可以是任何颜色的限制。
<components>
<component color="yellow"/>
<component color="green"/>
<component-set>
<component color="black"/>
</component-set>
</xs:complexType>
</components>
这是我当前的 xsd,我不应该编辑复杂的类型或元素名称。
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://../custom.xsd" xmlns="http://../custom.xsd">
<xs:complexType name="componentType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string" name="color" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="component-setType" mixed="true">
<xs:sequence>
<xs:element type="componentType" name="component" maxOccurs="unbounded" minOccurs="1"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="componentsType">
<xs:choice maxOccurs="unbounded" minOccurs="0">
<xs:element type="componentType" name="component"/>
<xs:element type="component-setType" name="component-set"/>
</xs:choice>
</xs:complexType>
</xs:schema>
解决方案
您已经在使用本地元素声明(xs:element
具有name
出现在复杂类型的内容模型中的属性)。出现在不同内容模型中的两个局部元素声明可以有不同的类型;仅仅因为两个元素都被调用"component"
并不意味着它们都需要具有 type "componentType"
。
推荐阅读
- amazon-web-services - AppSync 与 TS 构建问题中的 ApolloClient - 模块“Apollo 客户端”没有导出成员“WatchQueryFetchPolicy”
- javascript - 如何将 gpx 轨道与传单地图 Javascript 对齐
- python - 创建带有标签和相应元组列表的字典的问题
- node.js - 无法连接到 *name_server* - getaddrinfo ENOTFOUND
- python - 通过列表字典迭代过滤火花数据帧
- jenkins - 无法访问电子邮件正文中的环境变量
- c# - 无法在 EF Core 5/6 中的 Subselect 上使用 GroupBy
- integration - 用于 MS Graph 身份验证的 Google OAuth 客户端库
- oracle - Oracle 中第一次执行查询很慢
- php - Symfony 3.4 到 4.4 迁移中断调用学说侦听器上的方法