[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

RE: How to replace a reference to a tag by the tag it

Subject: RE: How to replace a reference to a tag by the tag itself?
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Thu, 6 Aug 2009 14:19:54 +0100
RE:  How to replace a reference to a tag by the tag  it
It depends how elaborate you want to be, for example whether you want to
handle references to a model group defined in a different schema document.
There are also complications that the group reference can have minOccurs and
maxOccurs attributes - if these are present, then you can't simply expand
the group reference by its content. Ignoring those two problems, you want
something like this:

<xsl:key name="groupKey" match="xs:schema/xs:group" 
    use="QName(/xs:schema/@targetNamespace, @name)"/>

<xsl:template match="group[@ref]">
  <xsl:apply-templates select="key('groupKey', resolve-QName(@ref, .))/*"/>
</xsl:template>

It also ignores other problems such as the possibility that the group is
redefined somewhere. Processing raw schema documents like this is error
prone; if you want to get it right every time it's better to work with the
schema component model generated by a schema processor that understands the
nuances.

Note: if you're using a schema-aware processor you don't need the
resolve-QName(), that will be done for you automatically.

Regards,

Michael Kay
http://www.saxonica.com/
http://twitter.com/michaelhkay 



> -----Original Message-----
> From: Ben Stover [mailto:bxstover@xxxxxxxxxxx] 
> Sent: 06 August 2009 13:42
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject:  How to replace a reference to a tag by the tag itself?
> 
> As you may know XML Schema files allow the following 
> declaration inside a XML Schema file:
> 
> <xsd:sequence>
> <xsd:group ref="foobar"/>
> </xsd:sequence>
> ....
> <xsd:group name="foobar">
> ....stuff of foobar
> </xsd:group>
> 
> I would like to write now a XSLT script which replaces the 
> reference by the tag itself or - alternatively - by a Type 
> declaration.
> 
> So after application of this XSLT script the resulting XML 
> Schema file should look like either
> 
> <xsd:sequence>
> ....stuff of foobar
> </xsd:sequence>
> 
> or
> 
> <xsd:sequence>
> <xsd:element name="foobar" type="foobarType"/> </xsd:sequence> ....
> <xsd:ComplexType name="foobarType">
> ....stuff of foobar
> </xsd:ComplexType>
> 
> 
> How would such a XSLT script look like?
> 
> Thank you
> Ben

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.