2

我为我的 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>

我想在另一个元素中引用我的点元素,例如:

<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 类型?

4

1 回答 1

3

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

以防万一您可能需要参考,您可以从这里开始 SO

于 2013-02-21T23:45:56.447 回答