xml - 一组元素中的一个元素在另一个元素之前的 XSD?
问题描述
父元素的子元素必须有一个元素(组外)后跟另一个特定元素。
<xsd:element name="elementContainer">
<xsd:element name="element1">
<xsd:element name="element2">
<xsd:element name="element3">
<xsd:element name="element4">
<xsd:element name="element5">
<xsd:element name="element6">
<xsd:element name="proceedingElement">
</xsd:element>
我想修改上面的 XSD,以便必须有一个元素(1-6),然后是后续元素。
我已经尝试围绕元素 1 到 6 进行选择,但这并没有被验证所接受。
<xsd:element name="elementContainer">
<xsd:choice minOccurs="1">
<xsd:element name="element1">
<xsd:element name="element2">
<xsd:element name="element3">
<xsd:element name="element4">
<xsd:element name="element5">
<xsd:element name="element6">
</xsd:choice>
<xsd:element name="proceedingElement">
</xsd:element>
对于以下两个示例,我希望第一个通过验证,第二个失败。
<elementContainer>
<element2/>
<proceedingElement/>
</elementContainer>
<elementContainer>
<proceedingElement/>
</elementContainer>
如果有帮助,甚至可以忽略存在一个进行元素的事实,因此只需确保六个元素中的至少一个元素存在就可以了。
解决方案
您对 . 有正确的基本概念xsd:choice
,但是您的 XSD 存在许多问题:
xsd:element
元素未关闭。xsd:complexType
并且xsd:sequence
失踪了。
通过对上述问题的更正,并删除 default xsd:choice/@minOccurs = 1
,此 XSD,
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" >
<xsd:element name="elementContainer">
<xsd:complexType>
<xsd:sequence>
<xsd:choice>
<xsd:element name="element1"/>
<xsd:element name="element2"/>
<xsd:element name="element3"/>
<xsd:element name="element4"/>
<xsd:element name="element5"/>
<xsd:element name="element6"/>
</xsd:choice>
<xsd:element name="proceedingElement"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
根据要求,将要求有一个element1
throughelement6
后跟一个proceedingElement
。
推荐阅读
- docker - Docker:/docker-entrypoint.sh:第 6 行:[::预期的整数表达式
- watchos-6 - 如何在没有 iPhone 的情况下直接在独立手表应用程序(使用 watchOS 6)中发送推送通知?
- javascript - 将视图转换为看起来像 React Native 中的曲线
- javascript - 使用 Leaflet.MarkerCluster.LayerSupport 插件在 Leaflet 中显示弹出窗口
- java - (Kotlin Vulkan) vkEnumerateDeviceExtensionProperties 显示总共零个可用扩展
- sql - dbGetQuery 持续针对 Sybase DB 运行 - 未返回任何结果
- javascript - Vue.Js 如何查看组件内触发的事件
- dart - 更改了 dart 中的默认参数
- java - 在java中的项目数组中查找最昂贵的项目
- java - 关于 Runtime.memory() 与 Windows 的物理内存使用历史图表的 Java 混淆