我正在开发通过XML可配置并可用PowerShell模块扩展的构建工具。我有一个XSD (http://download.crawler-lib.net/BuildTools/BuildConfig.xsd),它描述开箱即用的功能。正如前一个问题(Extending XML Schema xs:choice)中所建议的,我希望使用替换组以可扩展的方式映射我的工具。但现在我遇到了一个问题:有些工具只在某些地方有效。如何以可扩展的方式限制或映射工具到元素?
硬编码,我会使用<xs:choice>来定义某些地方的工具。例如构建工具:
<xs:choice maxOccurs="unbounded" minOccurs="0">
<xs:element ref="bt:AppendText"/>
<xs:element ref="bt:Autover"/>
<xs:element ref="bt:Call"/>
<xs:element ref="bt:CopyFile"/>
<xs:element ref="bt:Download"/>
<xs:element ref="bt:DumpContext"/>
<xs:element ref="bt:FxCop"/>
<xs:element ref="bt:IntelliLock"/>
<xs:element ref="bt:MSBuild"/>
<xs:element ref="bt:NuGetPack"/>
<xs:element ref="bt:NuGetPush"/>
<xs:element ref="bt:NUnit"/>
<xs:element ref="bt:NuSpecUpdate"/>
<xs:element ref="bt:Powershell"/>
<xs:element ref="bt:RemoveFile"/>
<xs:element ref="bt:Upload"/>
<xs:element ref="bt:VerifyFile"/>
<xs:element ref="bt:Xslt"/>
<xs:element ref="bt:Zip"/>
</xs:choice>全权证书工具:
<xs:choice maxOccurs="unbounded" minOccurs="0">
<xs:element ref="bt:Powershell"/>
<xs:element ref="bt:File"/>
<xs:element ref="bt:Plain"/>
</xs:choice>有一个共同的Powershell工具。否则,使用替换组就没有问题了。因此,我不知道如何以可重用的方式映射这些元素。
发布于 2014-09-01 13:09:22
在XSD1.0中,替换组形成层次结构,因此只有在允许在不同地方使用的一组工具只是嵌套的情况下,这才能起作用。在XSD1.1中,元素可以属于多个赤贫组,因此您可以(如果有意义的话)将每个这样的集合映射到替换组(通常以抽象元素作为其头),并为每个替换组专门定义成员资格。但是,只有在这种安排有一些自然的语义的情况下,我才会倾向于这样做,即如果工具表单集可以以对用户有意义的方式描述的话。
https://stackoverflow.com/questions/25604461
复制相似问题