扩展XML Schema xs:choice

时间:2014-08-30 16:36:17

标签: xml xsd schema intellisense

我正在开发可通过XML配置并可使用PowerShell模块扩展的构建工具。我有一个XSD(http://download.crawler-lib.net/BuildTools/BuildConfig.xsd),它描述了开箱即用的功能。一个扩展点是构建序列的工具:

  <xs:element name="BuildSequence">
    <xs:annotation>
      <xs:documentation>Performs a sequence of build tools to build the solution</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <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:attribute name="Name" type="xs:string" use="required"/>
      <xs:attribute name="NewBuild" type="bt:boolean" use="optional"/>
    </xs:complexType>
  </xs:element>

有人可以使用另一个定义名为&#34; MyTool&#34;的构建步骤工具的PowerShell模块来扩展它。因此,在XML配置中,可能有另一个有效元素应该在选项列表中,如:

<xs:element ref="custom:MyTool"/>

如何使用附加(custom.xsd)XSD文件扩展此类定义?那么我在Visual Studio中获得自定义元素的IntelliSense?

1 个答案:

答案 0 :(得分:0)

考虑使用替代组。如果您的内容模型允许元素E,那么它还允许E的替换组中的任何元素;任何人都可以创建这样一个元素(除非你阻止它),并且它可以自动变为可用而无需更改你的内容模型。