OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

 


 

   RE: [xml-dev] Transforming a schema with XSL

[ Lists Home | Date Index | Thread Index ]

Further explanation of what I need to do:

The first snippet of schema below is a persisted XML recordset of a table
queried from an AS400 / DB2 system.  The 2nd sample is from an identical
table but in an Access table.  I'm told, that I can perform a batch update
of records from the server (AS400/DB2 data) into my Access table with some
minor modifications to the schema and the XML.  I would be using ADO to
perform the insert of the XML recordset, but first I have to transform it.

Does this help, or is more information required?
Below you mention that there is an example of an "identity template rule" in
the XSLT spec itself; is this the schema at the top of the XML data?

Karl

-----Original Message-----
From: Michael Kay [mailto:michael.h.kay@ntlworld.com]
Sent: Wednesday, April 10, 2002 12:41 AM
To: 'Karl Stubsjoen'; xml-dev@lists.xml.org
Subject: RE: [xml-dev] Transforming a schema with XSL


I need help transforming a schema (which appears at the top of the XML
document).  I also need to transform the XML data itself.  I am looking to
"convert" the xml data from one type to another... you do this with XSL
correct?

I have a little snippet of the schema which needs to be transformed:

THIS:
<s:AttributeType name="CSHIP" rs:number="3" rs:write="true">
  <s:datatype dt:type="number" rs:dbtype="numeric" dt:maxLength="19"
rs:scale="0" rs:precision="4" rs:fixedlength="true" rs:maybenull="false" />


NEEDS TO BECOME THIS:
<s:AttributeType name="CSHIP" rs:number="3" rs:nullable="true"
rs:maydefer="true" rs:writeunknown="true">
  <s:datatype dt:type="number" rs:dbtype="numeric" dt:maxLength="19"
rs:scale="0" rs:precision="4" rs:fixedlength="true" />

    Is this possible, fairly straight forward, easy to explain?


Yes, it's very straightforward - though unless you explain how the output is
derived from the input, it's difficult to give you the right code. But
something like the following would do it:

<xsl:template match="s:attributeType">
  <xsl:copy>
  <xsl:copy-of select="@name | @rs:number"/>
  <xsl:attribute name="rs:write">true</xsl:attribute>
</xsl:template>

<xsl:template match="s:datatype">
  <xsl:copy>
  <xsl:copy-of select="@dt:type | @rs:dbtype | @dt:maxLength | @rs:scale |
@rs:precision"/>
</xsl:template>

You need to wrap these template rules in an <xsl:stylesheet> element that
also contains an "identity template rule" to copy other elements unchanged -
there's an example of such a rule in the XSLT spec itself.

Michael Kay
Software AG
home: Michael.H.Kay@ntlworld.com
work: Michael.Kay@softwareag.com


-----------------------------------------------------------------
The xml-dev list is sponsored by XML.org <http://www.xml.org>, an
initiative of OASIS <http://www.oasis-open.org>

The list archives are at http://lists.xml.org/archives/xml-dev/

To subscribe or unsubscribe from this list use the subscription
manager: <http://lists.xml.org/ob/adm.pl>






 

News | XML in Industry | Calendar | XML Registry
Marketplace | Resources | MyXML.org | Sponsors | Privacy Statement

Copyright 2001 XML.org. This site is hosted by OASIS