在 XML 模式中,有没有办法验证一个元素的名称是另一个元素的值

In an XML schema, is there a way to validate that a name of an element is the value of another element

我是 XML/xsd 的新手,我想为我在大学项目中使用的 XML 文件编写一个 XML 模式。这是我的问题: 我有这两个元素“a”和“c”。我想确保“c”中每个元素的名称是“a”中元素“b”的文本。

<a>
    <b>aa</b>
    <b>bb</b>
    <b>cc</b>
    ...
</a>
<c>
    <aa>.....</aa>
    <bb>.....</bb>
    <cc>.....</cc>
    ...
</c>

有什么方法可以做到这一点,还是我必须像这样手动列出所有名称?:

<xs:complexType name="c">
    <xs:sequence>
        <xs:element name="aa" .../>
        <xs:element name="bb" .../>
        <xs:element name="cc" .../>
        ...
    </xs:sequence>
</xs:complexType>

我知道我可以使用断言来检查一个元素是否存在,但我不知道我是否可以使用另一个元素的值作为名称来检查它,我不知道我是否可以这样做每个元素“b”,其中“b”的计数是任意的。

提前致谢!

这在 XSD 1.0 中不容易完成。在 XSD 1.1 中你可以写一个断言(在你展示的元素的共同祖先上):

<xs:assert test="every $n in c/* satisfies name($n) = a/b"/>