CAMed / XSD:定义属于许多父元素的元素

时间:2013-02-01 21:14:17

标签: xml xsd schema

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

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

1 个答案:

答案 0 :(得分:0)

不确定。定义名为Hold的顶级元素。 ('top-level'表示声明显示为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'是对其他地方提供的顶级声明的引用。