是否可以定义 xs:any 并在其中包含必须的元素?

发布于 2024-12-08 13:14:50 字数 1806 浏览 0 评论 0原文

我对具有结构的 XML 文件感兴趣:

<resource>
    <type>STRING</type>
    <metadata>
        <ANY_EXTERNAL_ELEMENT1>
            <value>STRING</value> 
        </ANY_EXTERNAL_ELEMENT1>
        <ANY_EXTERNAL_ELEMENT2>
            <reference>STRING</reference> 
        </ANY_EXTERNAL_ELEMENT2>
        <ANY_EXTERNAL_ELEMENT3>
            <value>STRING</value> 
        </ANY_EXTERNAL_ELEMENT3>
    </metadata>
</resource>

元数据元素需要至少有一个 ANY_EXTERNAL_ELEMENT 子元素,该子元素只需要有一个名称位于集合 {"reference", "value"} 中的子元素。

是否可以在 XMLSchema 中实现?

我尝试过:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:element name="resource">
        <xs:complexType>
            <xs:all>
                <xs:element name="type" type="xs:string"/>
                <xs:element name="metadata">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:any minOccurs="1">
                                <xs:complexType>
                                    <xs:choice>
                                        <xs:element name="reference"/>
                                        <xs:element name="value"/>
                                    </xs:choice>
                                </xs:complexType>
                            </xs:any>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:all>
        </xs:complexType>
    </xs:element>

</xs:schema>

但它无效。 我需要帮助。

提前致谢。

I'm interested in XML files with structure:

<resource>
    <type>STRING</type>
    <metadata>
        <ANY_EXTERNAL_ELEMENT1>
            <value>STRING</value> 
        </ANY_EXTERNAL_ELEMENT1>
        <ANY_EXTERNAL_ELEMENT2>
            <reference>STRING</reference> 
        </ANY_EXTERNAL_ELEMENT2>
        <ANY_EXTERNAL_ELEMENT3>
            <value>STRING</value> 
        </ANY_EXTERNAL_ELEMENT3>
    </metadata>
</resource>

metadata element need to have at least one ANY_EXTERNAL_ELEMENT child that need to have only one child element with name in set {"reference", "value"}.

Is it possible to achieve it in XMLSchema?

What I tried:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:element name="resource">
        <xs:complexType>
            <xs:all>
                <xs:element name="type" type="xs:string"/>
                <xs:element name="metadata">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:any minOccurs="1">
                                <xs:complexType>
                                    <xs:choice>
                                        <xs:element name="reference"/>
                                        <xs:element name="value"/>
                                    </xs:choice>
                                </xs:complexType>
                            </xs:any>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:all>
        </xs:complexType>
    </xs:element>

</xs:schema>

But it's not valid.
I need help.

Thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

旧故 2024-12-15 13:14:50

不,你不能像这样限制“外部”元素。的内容模型仅允许<注释>。反转结构不是更自然吗:

<resource>
<type>STRING</type>
<metadata>
    <external value="STRING">
        <ANY-EXTERNAL-ELEMENT-1/>
    </external>
    <external ref="STRING">
        <ANY-EXTERNAL-ELEMENT-2/>
    </external>
</metadata>
</resource>

但是,当然,我不知道你的用例是什么。

No, you cannot constrain an "external" element like that. The content model for <any> allows only <annotation>. Wouldn't it be more natural to kind of invert the structure:

<resource>
<type>STRING</type>
<metadata>
    <external value="STRING">
        <ANY-EXTERNAL-ELEMENT-1/>
    </external>
    <external ref="STRING">
        <ANY-EXTERNAL-ELEMENT-2/>
    </external>
</metadata>
</resource>

But, of course, I have no idea what your use case is.

粉红×色少女 2024-12-15 13:14:50

我认为如果您想包含它们的类型,您必须在 xs:choice 中或通过替换组枚举可能的元素(ANY-EXTERNAL-ELEMENT-1 等)。

I think you have to enumerate the possible elements (ANY-EXTERNAL-ELEMENT-1 etc) either in an xs:choice or by means of a substitution group if you want to contain their type.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文