在 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"/>
我是 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"/>