我正在开发可通过XML进行配置并可通过PowerShell模块进行扩展的构建工具。我有一个XSD(http://download.crawler-lib.net/BuildTools/BuildConfig.xsd),它描述了开箱即用功能。正如前面的问题(Extending XML Schema xs:choice)所建议的,我想使用替换组以可扩展的方式映射我的工具。但是现在我有一个问题:有些工具只在某些地方有效。我怎样才能以可扩展的方式将工具限制或映射到我的元素?XSD替代组n:m映射/多个替换组
硬编码的,我会用<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:59:29