【问题标题】:XSD substitution group n:m mapping / multiple substitution groupsXSD 替换组 n:m 映射/多个替换组
【发布时间】:2014-10-25 14:25:59
【问题描述】:

我正在开发可通过 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 工具。否则使用替换组是没有问题的。所以我不知道如何以可重用的方式映射这些元素。

【问题讨论】:

    标签: xml powershell xsd substitution


    【解决方案1】:

    在 XSD 1.0 中,替换组形成一个层次结构,因此只有在不同位置允许的工具集简单嵌套时才有效。在 XSD 1.1 中,元素可以属于多个替换组,因此您可以(如果有意义)将每个这样的集合映射到一个替换组(通常以抽象元素作为其头部)并专门为每个替换组定义成员资格。但是,如果安排有一些自然语义,即工具形成可以以对用户有意义的方式描述的集合,我只会倾向于采用这种方式。

    【讨论】:

    • 感谢您提供的信息,我尝试了一种稍微不同的方法。我为需要使用特定工具的地方定义了一个通用工具元素()和特定工具元素,例如()。然后,我在需要使用这些工具的地方选择一般元素和特定元素。所以我有可以在任何地方工作的“通用”工具和用于构建步骤、标签、版本等的特定工具。它并不完全灵活,但它的语义对我有用。
    猜你喜欢
    • 2017-02-13
    • 2020-01-07
    • 2021-04-21
    • 1970-01-01
    • 1970-01-01
    • 2012-01-26
    • 1970-01-01
    • 2019-05-07
    • 2010-09-26
    相关资源
    最近更新 更多