为了验证 XML 文档,我想知道是否可以对属性值进行引用。
我在 ID 属性中有带有数值的状态。在这些州,一个儿子在这里是为了过渡到另一个州。我想在这里放一个参考,以确保这个儿子中指定的 ID 是一个状态中的现有 ID。
主要目标是仅在文档中指定了所有 ID 时才验证文档。
有我的 XSD 文档:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb" jxb:version="2.0">
<xs:element name="scxml">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="state">
<xs:complexType>
<xs:choice maxOccurs="1">
<xs:element name="nextstate" type="xs:nonNegativeInteger"/>
</xs:sequence>
</xs:choice>
<xs:attribute name="id" use="required" type="xs:nonNegativeInteger"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="version" type="xs:string" use="optional"/>
</xs:complexType>
<xs:unique name="uniqueStateID">
<xs:selector xpath="./state"/>
<xs:field xpath="@id"/>
</xs:unique>
</xs:element>
</xs:schema>
所以我想 NEXTSTATE 节点的值是对节点状态 id 属性值的引用。
有效文档示例(两种状态,一种转换为现有 ID):
<sxml version="1.0">
<state id="1">
<nextstate>5</nextstate>
</state>
<state id="5" />
</scxml>
无效文档示例(两种状态,一种转换为不存在的 ID):
<sxml version="1.0">
<state id="1">
<nextstate>5</nextstate>
</state>
</scxml>
你知道这是否可能吗?
感谢您的回答:)