replacing xsd:choice in regularly updated XSD's
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
add a comment |
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
add a comment |
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
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
xml xslt xsd
asked Nov 21 at 10:47
Documentalist
63
63
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
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
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
add a comment |
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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
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
add a comment |
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
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
add a comment |
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
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
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
add a comment |
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
add a comment |
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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