[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
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
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|