我正在创建一个XSD / CAM原型来建模磁盘文件系统。我正在使用免费的CAMed软件和Windows Notepad(当我遇到CAMed软件中的错误时。)在我的原型中,我有一个名为“Hold”的元素。保持告诉文件系统保持(不删除)目录,文件等,因为应用程序需要它。 (将Hold视为有点像硬链接。)在原型中,Hold元素可以是多个元素的子元素,而不仅仅是一个元素,但在所有情况下都是相同的。通常,我只是将Hold元素复制并粘贴到它所属的每个父元素中(例如目录,文件等),但是,CAMed软件没有这种能力,我不想手动复制和粘贴记事本中的XML(我会有许多副本来更新和管理。)
是否可以指定一个元素可以属于多个父元素,而不重复原始元素定义?谢谢!
答案 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'是对其他地方提供的顶级声明的引用。