replacing xsd:choice in regularly updated XSD's












1














Is there a simple (XSLT?), preferably automated, way to alter an xsd:choice construct in an XSD file to a definition without the choice construct. For example, I get an XSD that contains the following segment:



<xsd:choice minOccurs="1" maxOccurs="1">
<xsd:element name="ExistingBuild" type="ExistingBuild" nillable="false"/>
<xsd:element name="NewBuild" type="NewBuild" nillable="false"/>
</xsd:choice>


This XSD needs to be imported in an application that doesn't support the choice construct. I have manually changed the XSD to have the segment defined as follows:



<xsd:element name="ExistingBuild" type="ExistingBuild" nillable="false" minOccurs="0" maxOccurs="1"/>
<xsd:element name="NewBuild" type="NewBuild" nillable="false" minOccurs="0" maxOccurs="1"/>


The resulting XSD can be imported correctly and serves the purpose. So manually I can change this.



However, this XSD will get updated regularly in the future and I would need to manually alter it every time a new version is delivered. To prevent manual errors I am looking to automate this conversion. Is XSLT a possible solution for this, and how would I define such an XSLT solution?



Thanks in advance for any help in this.










share|improve this question



























    1














    Is there a simple (XSLT?), preferably automated, way to alter an xsd:choice construct in an XSD file to a definition without the choice construct. For example, I get an XSD that contains the following segment:



    <xsd:choice minOccurs="1" maxOccurs="1">
    <xsd:element name="ExistingBuild" type="ExistingBuild" nillable="false"/>
    <xsd:element name="NewBuild" type="NewBuild" nillable="false"/>
    </xsd:choice>


    This XSD needs to be imported in an application that doesn't support the choice construct. I have manually changed the XSD to have the segment defined as follows:



    <xsd:element name="ExistingBuild" type="ExistingBuild" nillable="false" minOccurs="0" maxOccurs="1"/>
    <xsd:element name="NewBuild" type="NewBuild" nillable="false" minOccurs="0" maxOccurs="1"/>


    The resulting XSD can be imported correctly and serves the purpose. So manually I can change this.



    However, this XSD will get updated regularly in the future and I would need to manually alter it every time a new version is delivered. To prevent manual errors I am looking to automate this conversion. Is XSLT a possible solution for this, and how would I define such an XSLT solution?



    Thanks in advance for any help in this.










    share|improve this question

























      1












      1








      1







      Is there a simple (XSLT?), preferably automated, way to alter an xsd:choice construct in an XSD file to a definition without the choice construct. For example, I get an XSD that contains the following segment:



      <xsd:choice minOccurs="1" maxOccurs="1">
      <xsd:element name="ExistingBuild" type="ExistingBuild" nillable="false"/>
      <xsd:element name="NewBuild" type="NewBuild" nillable="false"/>
      </xsd:choice>


      This XSD needs to be imported in an application that doesn't support the choice construct. I have manually changed the XSD to have the segment defined as follows:



      <xsd:element name="ExistingBuild" type="ExistingBuild" nillable="false" minOccurs="0" maxOccurs="1"/>
      <xsd:element name="NewBuild" type="NewBuild" nillable="false" minOccurs="0" maxOccurs="1"/>


      The resulting XSD can be imported correctly and serves the purpose. So manually I can change this.



      However, this XSD will get updated regularly in the future and I would need to manually alter it every time a new version is delivered. To prevent manual errors I am looking to automate this conversion. Is XSLT a possible solution for this, and how would I define such an XSLT solution?



      Thanks in advance for any help in this.










      share|improve this question













      Is there a simple (XSLT?), preferably automated, way to alter an xsd:choice construct in an XSD file to a definition without the choice construct. For example, I get an XSD that contains the following segment:



      <xsd:choice minOccurs="1" maxOccurs="1">
      <xsd:element name="ExistingBuild" type="ExistingBuild" nillable="false"/>
      <xsd:element name="NewBuild" type="NewBuild" nillable="false"/>
      </xsd:choice>


      This XSD needs to be imported in an application that doesn't support the choice construct. I have manually changed the XSD to have the segment defined as follows:



      <xsd:element name="ExistingBuild" type="ExistingBuild" nillable="false" minOccurs="0" maxOccurs="1"/>
      <xsd:element name="NewBuild" type="NewBuild" nillable="false" minOccurs="0" maxOccurs="1"/>


      The resulting XSD can be imported correctly and serves the purpose. So manually I can change this.



      However, this XSD will get updated regularly in the future and I would need to manually alter it every time a new version is delivered. To prevent manual errors I am looking to automate this conversion. Is XSLT a possible solution for this, and how would I define such an XSLT solution?



      Thanks in advance for any help in this.







      xml xslt xsd






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 21 at 10:47









      Documentalist

      63




      63
























          1 Answer
          1






          active

          oldest

          votes


















          0














          It's not that hard to write an XSLT to remove the xsd:choice element



          Start with the identity template (which handles the things you don't want to update)



          <xsl:template match="@*|node()">
          <xsl:copy>
          <xsl:apply-templates select="@*|node()"/>
          </xsl:copy>
          </xsl:template>


          Add a template to ignore xsd:choice



          <xsl:template match="xsd:choice">
          <xsl:apply-templates />
          </xsl:template>


          Then add a template to process the child xsd:elements



          <xsl:template match="xsd:choice/xsd:element">
          <xsd:element minOccurs="0" maxOccurs="{../@maxOccurs}">
          <xsl:apply-templates select="@*" />
          </xsd:element>
          </xsl:template>


          Putting this all together gives this...



          <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
          xmlns:xsd="https://www.w3.org/2001/XMLSchema"
          version="1.0">
          <xsl:output method="xml" indent="yes" />

          <xsl:template match="@*|node()">
          <xsl:copy>
          <xsl:apply-templates select="@*|node()"/>
          </xsl:copy>
          </xsl:template>

          <xsl:template match="xsd:choice">
          <xsl:apply-templates />
          </xsl:template>

          <xsl:template match="xsd:choice/xsd:element">
          <xsd:element minOccurs="0" maxOccurs="{../@maxOccurs}">
          <xsl:apply-templates select="@*" />
          </xsd:element>
          </xsl:template>
          </xsl:stylesheet>


          See it in action with an imcomplete schema at http://xsltfiddle.liberty-development.net/bFDb2Di






          share|improve this answer





















          • Wow, I wasn't expecting responses to come in so quickly and detailed, thanks. I will try that and let you know if it worked.
            – Documentalist
            Nov 21 at 11:10











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53410409%2freplacing-xsdchoice-in-regularly-updated-xsds%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          0














          It's not that hard to write an XSLT to remove the xsd:choice element



          Start with the identity template (which handles the things you don't want to update)



          <xsl:template match="@*|node()">
          <xsl:copy>
          <xsl:apply-templates select="@*|node()"/>
          </xsl:copy>
          </xsl:template>


          Add a template to ignore xsd:choice



          <xsl:template match="xsd:choice">
          <xsl:apply-templates />
          </xsl:template>


          Then add a template to process the child xsd:elements



          <xsl:template match="xsd:choice/xsd:element">
          <xsd:element minOccurs="0" maxOccurs="{../@maxOccurs}">
          <xsl:apply-templates select="@*" />
          </xsd:element>
          </xsl:template>


          Putting this all together gives this...



          <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
          xmlns:xsd="https://www.w3.org/2001/XMLSchema"
          version="1.0">
          <xsl:output method="xml" indent="yes" />

          <xsl:template match="@*|node()">
          <xsl:copy>
          <xsl:apply-templates select="@*|node()"/>
          </xsl:copy>
          </xsl:template>

          <xsl:template match="xsd:choice">
          <xsl:apply-templates />
          </xsl:template>

          <xsl:template match="xsd:choice/xsd:element">
          <xsd:element minOccurs="0" maxOccurs="{../@maxOccurs}">
          <xsl:apply-templates select="@*" />
          </xsd:element>
          </xsl:template>
          </xsl:stylesheet>


          See it in action with an imcomplete schema at http://xsltfiddle.liberty-development.net/bFDb2Di






          share|improve this answer





















          • Wow, I wasn't expecting responses to come in so quickly and detailed, thanks. I will try that and let you know if it worked.
            – Documentalist
            Nov 21 at 11:10
















          0














          It's not that hard to write an XSLT to remove the xsd:choice element



          Start with the identity template (which handles the things you don't want to update)



          <xsl:template match="@*|node()">
          <xsl:copy>
          <xsl:apply-templates select="@*|node()"/>
          </xsl:copy>
          </xsl:template>


          Add a template to ignore xsd:choice



          <xsl:template match="xsd:choice">
          <xsl:apply-templates />
          </xsl:template>


          Then add a template to process the child xsd:elements



          <xsl:template match="xsd:choice/xsd:element">
          <xsd:element minOccurs="0" maxOccurs="{../@maxOccurs}">
          <xsl:apply-templates select="@*" />
          </xsd:element>
          </xsl:template>


          Putting this all together gives this...



          <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
          xmlns:xsd="https://www.w3.org/2001/XMLSchema"
          version="1.0">
          <xsl:output method="xml" indent="yes" />

          <xsl:template match="@*|node()">
          <xsl:copy>
          <xsl:apply-templates select="@*|node()"/>
          </xsl:copy>
          </xsl:template>

          <xsl:template match="xsd:choice">
          <xsl:apply-templates />
          </xsl:template>

          <xsl:template match="xsd:choice/xsd:element">
          <xsd:element minOccurs="0" maxOccurs="{../@maxOccurs}">
          <xsl:apply-templates select="@*" />
          </xsd:element>
          </xsl:template>
          </xsl:stylesheet>


          See it in action with an imcomplete schema at http://xsltfiddle.liberty-development.net/bFDb2Di






          share|improve this answer





















          • Wow, I wasn't expecting responses to come in so quickly and detailed, thanks. I will try that and let you know if it worked.
            – Documentalist
            Nov 21 at 11:10














          0












          0








          0






          It's not that hard to write an XSLT to remove the xsd:choice element



          Start with the identity template (which handles the things you don't want to update)



          <xsl:template match="@*|node()">
          <xsl:copy>
          <xsl:apply-templates select="@*|node()"/>
          </xsl:copy>
          </xsl:template>


          Add a template to ignore xsd:choice



          <xsl:template match="xsd:choice">
          <xsl:apply-templates />
          </xsl:template>


          Then add a template to process the child xsd:elements



          <xsl:template match="xsd:choice/xsd:element">
          <xsd:element minOccurs="0" maxOccurs="{../@maxOccurs}">
          <xsl:apply-templates select="@*" />
          </xsd:element>
          </xsl:template>


          Putting this all together gives this...



          <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
          xmlns:xsd="https://www.w3.org/2001/XMLSchema"
          version="1.0">
          <xsl:output method="xml" indent="yes" />

          <xsl:template match="@*|node()">
          <xsl:copy>
          <xsl:apply-templates select="@*|node()"/>
          </xsl:copy>
          </xsl:template>

          <xsl:template match="xsd:choice">
          <xsl:apply-templates />
          </xsl:template>

          <xsl:template match="xsd:choice/xsd:element">
          <xsd:element minOccurs="0" maxOccurs="{../@maxOccurs}">
          <xsl:apply-templates select="@*" />
          </xsd:element>
          </xsl:template>
          </xsl:stylesheet>


          See it in action with an imcomplete schema at http://xsltfiddle.liberty-development.net/bFDb2Di






          share|improve this answer












          It's not that hard to write an XSLT to remove the xsd:choice element



          Start with the identity template (which handles the things you don't want to update)



          <xsl:template match="@*|node()">
          <xsl:copy>
          <xsl:apply-templates select="@*|node()"/>
          </xsl:copy>
          </xsl:template>


          Add a template to ignore xsd:choice



          <xsl:template match="xsd:choice">
          <xsl:apply-templates />
          </xsl:template>


          Then add a template to process the child xsd:elements



          <xsl:template match="xsd:choice/xsd:element">
          <xsd:element minOccurs="0" maxOccurs="{../@maxOccurs}">
          <xsl:apply-templates select="@*" />
          </xsd:element>
          </xsl:template>


          Putting this all together gives this...



          <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
          xmlns:xsd="https://www.w3.org/2001/XMLSchema"
          version="1.0">
          <xsl:output method="xml" indent="yes" />

          <xsl:template match="@*|node()">
          <xsl:copy>
          <xsl:apply-templates select="@*|node()"/>
          </xsl:copy>
          </xsl:template>

          <xsl:template match="xsd:choice">
          <xsl:apply-templates />
          </xsl:template>

          <xsl:template match="xsd:choice/xsd:element">
          <xsd:element minOccurs="0" maxOccurs="{../@maxOccurs}">
          <xsl:apply-templates select="@*" />
          </xsd:element>
          </xsl:template>
          </xsl:stylesheet>


          See it in action with an imcomplete schema at http://xsltfiddle.liberty-development.net/bFDb2Di







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Nov 21 at 11:03









          Tim C

          59.6k126082




          59.6k126082












          • Wow, I wasn't expecting responses to come in so quickly and detailed, thanks. I will try that and let you know if it worked.
            – Documentalist
            Nov 21 at 11:10


















          • Wow, I wasn't expecting responses to come in so quickly and detailed, thanks. I will try that and let you know if it worked.
            – Documentalist
            Nov 21 at 11:10
















          Wow, I wasn't expecting responses to come in so quickly and detailed, thanks. I will try that and let you know if it worked.
          – Documentalist
          Nov 21 at 11:10




          Wow, I wasn't expecting responses to come in so quickly and detailed, thanks. I will try that and let you know if it worked.
          – Documentalist
          Nov 21 at 11:10


















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.





          Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


          Please pay close attention to the following guidance:


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53410409%2freplacing-xsdchoice-in-regularly-updated-xsds%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          404 Error Contact Form 7 ajax form submitting

          How to know if a Active Directory user can login interactively

          TypeError: fit_transform() missing 1 required positional argument: 'X'