gpt4 book ai didi

xsd - XML 架构 : require an element to be present when another is present

转载 作者:行者123 更新时间:2023-12-04 16:57:16 28 4
gpt4 key购买 nike

我的模式允许一个特定的元素是可选的,但是当我稍后在文件中遇到一个不同的也是可选的元素时,我需要前一个元素存在。我如何通过 XSD 确保这一点?

例子:

<settings>
<file name="narf.txt"/>
<metafile name="narf.meta"/>
<filtermeta>true</filtermeta>
</settings>

应该是有效的,

<settings>
<file name="narf.txt"/>
<metafile name="narf.meta"/>
</settings>

<settings>
<file name="narf.txt"/>
</settings>

应该也是有效的,

<settings>
<file name="narf.txt"/>
<filtermeta>true</filtermeta>
</settings>

应该是无效的。

最佳答案

尝试以下模式定义:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="settings">
<xs:complexType>
<xs:sequence>
<xs:element name="file">
<xs:complexType>
<xs:attribute name="name" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:sequence minOccurs="0">
<xs:element name="metafile">
<xs:complexType>
<xs:attribute name="name" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="filtermeta" type="xs:string"/>
</xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

我已经使用 xmllint 针对此架构运行了您的前三个示例,并且它们正确地验证了。第四个示例失败:

cvc-complex-type.2.4.a: Invalid content was found starting with element 'filtermeta'. One of '{metafile}' is expected.

正如预期的那样。

关于xsd - XML 架构 : require an element to be present when another is present,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8788063/

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