RE: Accessing values from another sub-tree

Subject: RE: Accessing values from another sub-tree
From: David Schach <davidsch@xxxxxxxxxxxxx>
Date: Thu, 7 Jan 1999 11:27:57 -0800
Yes, this can be accomplished within the XSL spec. If you change your data
so that it uses id/idrefs then you do not need the follow() function.  I've
highlighted the attributes that should become ididrefs. For example,

	<Class name="Customer">
		<Property name="FirstName" datatype="String"/>
		<Property name="LastName" datatype="String"/>
		<Property name="CustID" datatype="Integer"/>
		<Key primary="true">
			<Part href="CustID'" />
	</Key>

	<Class name="Address">
		<Property name="Street" datatype="String"/>
		<Property name="City" datatype="String"/>
		<Property name="ZIP" datatype="String"/>
		<Property name="State" datatype="String"/>
		<Key primary="true">
			<Part href="../Property/@name='Zip'" />
			<Part href="../Property/@name='Street'" />
		</Key>
</Class>
	...
	<Association name="AccessibleAt">
		<AssociationEnd href="Customer'" role="theCustomer"
	cardinality="*"/>
		<AssociationEnd href="Address'" role="theAddress"
	cardinality="*"/>
</Association>

Then the XSL becomes
				<xsl:for-each
select="id(@href)/Key[@primary='true']/Part">

Note: This feature is not available in the IE5b2 but it will be available in
the final release of IE5.  

> -----Original Message-----
> From:	Vun Kannon, David [SMTP:dvunkannon@xxxxxxxx]
> Sent:	Wednesday, January 06, 1999 2:12 PM
> To:	xsl-list@xxxxxxxxxxxxxxxx
> Subject:	Accessing values from another sub-tree
> 
> 	I've been trying to achieve a particular result without success.
> Since I'm unsure if the problem is my own thickheadedness, the
> implementation of XSL I'm using (IE5b2), or the language itself, I turn to
> this forum for advice.
> 
> 	I've cooked up an XML encoding of UML by working as directly as
> possible from the UML spec. A VB script inside Rational Rose lets me build
> schemas such as:
> <Schema name="SimpleBank">
> <Class name="Customer">
> 	<Property name="FirstName" datatype="String"/>
> 	<Property name="LastName" datatype="String"/>
> 	<Property name="ID" datatype="Integer"/>
> 	<Key primary="true">
> 		<Part href="../Property/@name='ID'" />
> 	</Key>
> </Class>
> 
> <Class name="Address">
> 	<Property name="Street" datatype="String"/>
> 	<Property name="City" datatype="String"/>
> 	<Property name="ZIP" datatype="String"/>
> 	<Property name="State" datatype="String"/>
> 	<Key primary="true">
> 		<Part href="../Property/@name='Zip'" />
> 		<Part href="../Property/@name='Street'" />
> 	</Key>
> </Class>
> 
> <Association name="AccessibleAt">
> 	<AssociationEnd href="//Class/@name='Customer'" role="theCustomer"
> cardinality="*"/>
> 	<AssociationEnd href="//Class/@name='Address'" role="theAddress"
> cardinality="*"/>
> </Association>
> </Schema>
> 
> 	Given this type of schema, I'm attempting to use an XSL stylesheet
> to transform the schema into SQL DDL. The result I'm aiming for from the
> above schema would be something like this:
> Create Schema SimpleBank 
> Create Table Customer (
> 	FirstName varchar,
> 	LastName varchar,
> 	ID integer,
> 	Primary Key ( ID )
> );
> Create Table Address (
> 	Street varchar,
> 	City varchar,
> 	ZIP varchar,
> 	State varchar,
> 	Primary Key ( Street, ZIP )
> );
> Create Table AccessibleAt (
> 	-- from theCustomer
> 	ID integer,
> 	-- from theAddress
> 	Street varchar,
> 	ZIP varchar
> );
> 
> 	The many-to-many association becomes a join table. The stylesheet
> looks like:
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl";>
>   <xsl:template match="/">
> 	Create Schema <xsl:value-of select="//Schema/@name"/>
>          <xsl:for-each select="//Class">
> 		Create Table <xsl:value-of select="@name"/> (
> 	         <xsl:for-each select="Property">
> 		<xsl:value-of select="@name"/>&#32;<xsl:value-of
> select="@datatype"/>
> 		<xsl:if match="Property[$not$ end()]">,</xsl:if>
> 	          </xsl:for-each>
> 	         <xsl:for-each select="Key[@primary='true']">,
> 		Primary Key (
> 		         <xsl:for-each select="Part">
> 			<xsl:value-of select="follow(@href)/@name"/>
> 				<xsl:if match="Part[$not$ end()]">,
> </xsl:if>
> 		          </xsl:for-each> )
> 	          </xsl:for-each>
> 		);
>           </xsl:for-each>
>         <xsl:for-each select="//Association">
> 		Create Table <xsl:value-of select="@name"/> (
> 	         <xsl:for-each select="AssociationEnd">
> 			-- From <xsl:value-of select="@role"/>
> 			<xsl:for-each
> select="follow(@href)/Key[@primary='true']/Part">
> 				<xsl:value-of select="follow(@href)/@name"/>
> 				<xsl:if match="Part[$not$ end()]">,
> </xsl:if>
> 			</xsl:for-each>
> 			<xsl:if match="AssociationEnd[$not$
> end()]">,</xsl:if>
> 	          </xsl:for-each>
> 		);
>           </xsl:for-each>
>    </xsl:template>  
> </xsl:stylesheet>
> 
> 	Now, everything in the stylesheet is plain vanilla, except for that
> follow() function in the selection patterns. Its sort of like the WD
> function id() on steroids. The question I put before you is whether or not
> the functionality of follow() can be accomplished within the spec or
> within
> any implementation. If not, consider this a plea for such functionality in
> the pattern language. Given the position of the XSL WG in its position
> paper
> for QL '98, that the W3C should look in-house for technology for the
> generic
> query language, it would be nice if XSL itself understood a little about
> links and the "in-house W3C technology" of XLink and XPointer.
> Cheers,
> David vun Kannon
> Manager, KPMG LLP
> **************************************************************************
> ***
> The information in this email is confidential and may be legally
> privileged.
> It is intended solely for the addressee. Access to this email by anyone
> else
> is unauthorized. 
> 
> If you are not the intended recipient, any disclosure, copying,
> distribution
> or any action taken or omitted to be taken in reliance on it, is
> prohibited
> and may be unlawful. When addressed to our clients any opinions or advice
> contained in this email are subject to the terms and conditions expressed
> in
> the governing KPMG client engagement letter.         
> **************************************************************************
> ***
> 
> 
>  XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread