我为我的xml元素使用全局唯一标识符(GUID),架构如下所示:
<xs:simpleType name="guidType">
<xs:restriction base="xs:string">
<xs:pattern value="[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]
{4}-[a-fA-F0-9]{12}"/>
</xs:restriction>
</xs:simpleType>
和像这样的xml元素:
<point guid="5C815FB2-0731-4E88-9885-CFC49B8E7B92" id="ABC" x="12" y="51" z="0"/>
对应的xsd架构:
<xs:complexType name="pointType">
<xs:attribute name="guid" type="guidType" use="required"/>
<xs:attribute name="id" type="xs:token" use="required"/>
<xs:attribute name="x" type="xs:double" use="required"/>
<xs:attribute name="y" type="xs:double" use="required"/>
<xs:attribute name="z" type="xs:double" use="required"/>
</xs:complexType>
我想在另一个元素中引用我的point元素,例如:
<layer>
<pointref guidref="5C815FB2-0731-4E88-9885-CFC49B8E7B92"/>
<pointref guidref="4671EFD4-506F-4A61-BCF0-427875074115"/>
</layer>
我可以使用ID和IDREF类型在模式文件中更改我的点类型定义来实现它:
<xs:attribute name="guid" type="xs:ID" use="required"/>
问题:
有没有办法让xs:ID类型也是GUID类型?
答案 0 :(得分:2)
简短的回答是否定的。 ID为NCNAME s,因此第一个位置带有数字的值会破坏它。虽然看起来可能更复杂,但使用xsd:unique / xsd:key / xsd:keyref被很多人认为是在使用XSD时实现目标的最佳方式。
如果您需要参考,可以启动right here on SO。