2013-02-01 62 views
0

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

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

回答

0

当然。定义名为Hold的顶级元素。 ('顶层'是指该声明显示为xs:schema的子元素,并且对于特定的复杂类型不是本地的。)然后从复合类型中引用该元素声明,其中Hold应出现在该类型声明中。

所以你保留的声明将是这样的:

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

和你的类型的目录,文件等的声明将涉及持有,使用XS的ref属性:元素元素,而不是使用名称属性声明一个局部保持元件:

<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”是局部声明,而“保持”和“卡德瓦拉德”是供给到顶层声明引用别处。

+0

哇,这很容易!在我通过CAMed导出最终的XSD之后,我会继续努力。非常感谢! – user2033836