0

我正在创建一个 XSD/CAM 原型来模拟磁盘文件系统。我正在使用免费的 CAMed 软件和 Windows 记事本(当我在 CAMed 软件中遇到错误时)。在我的原型中,我有一个名为“Hold”的元素。Hold 告诉文件系统保留(而不是删除)目录、文件等,因为应用程序需要它。(将 Hold 想象成一个硬链接。)在原型中,Hold 元素可以是多个元素的子元素,而不仅仅是一个元素,而且在所有情况下都是相同的。通常,我只需将 Hold 元素复制并粘贴到它所属的每个父级(例如目录、文件等)中,但是 CAMed 软件没有该功能,我不想手动复制和粘贴记事本中的 XML(然后我会有很多副本要更新和管理。)

是否可以指定一个元素可以属于多个父级,而不复制原始元素定义?谢谢!

4

1 回答 1

0

当然。定义一个名为 Hold 的顶级元素。(“顶级”意味着声明作为 xs:schema 的子项出现,并且不是特定复杂类型的本地。)然后从 Hold 应该出现的复杂类型中引用该元素声明。

因此,您的 Hold 声明将如下所示:

<xs:element name="Hold" type="HoldType"/>
<!--* HoldType left as exercise for the reader ... *-->

并且您对目录、文件等类型的声明将引用 Hold,使用 xs:element 元素上的 ref 属性,而不是使用 name 属性声明本地 Hold 元素:

<xs:type name="DirectoryType">
  <xs:choice minOccurs="0" maxOccurs="unbounded">
    <xs:element name="blort" type="xs:gYear"/>
    <xs:element name="farble" type="Farble"/>
    <xs:element ref="cadwallader"/>
    <xs:element ref="Hold"/>
  </xs:choice>
<xs:complexType>

在这里,元素 'blort' 和 'farble' 是本地声明,而 'Hold' 和 'cadwallader' 是对其他地方提供的顶级声明的引用。

于 2013-02-01T21:46:54.080 回答