GUID属性为xsd架构中的IDREF

时间:2013-02-15 09:31:59

标签: xml reference xsd guid

我为我的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类型?

1 个答案:

答案 0 :(得分:2)

简短的回答是否定的。 ID为NCNAME s,因此第一个位置带有数字的值会破坏它。虽然看起来可能更复杂,但使用xsd:unique / xsd:key / xsd:keyref被很多人认为是在使用XSD时实现目标的最佳方式。

如果您需要参考,可以启动right here on SO