W3C home > Mailing lists > Public > xmlschema-dev@w3.org > April 2002

Re: Schema Design: Composition vs Subclassing

From: Roger L. Costello <costello@mitre.org>
Date: Tue, 16 Apr 2002 10:24:05 -0400
Message-ID: <3CBC3405.949DE796@mitre.org>
To: Jeni Tennison <jeni@jenitennison.com>
CC: xmlschema-dev@w3.org, paul.w.daisey@census.gov, Simon.Cox@csiro.au, costello@mitre.org
Jeni Tennison wrote:

> Could you expand on how you see Delegation being used within an XML
> Schema such that an application can take advantage of it in the same
> way as it could were the type hierarchy used?
> 
> For example, given the Camera type hierarchy described in your web
> page, I could (eventually, come XSLT 2.0) do:
> 
> <xsl:template match="*[type() = 'Camera']">
>   ... do some processing common to all cameras ...
> </xsl:template>
> 
> How do you see the Delegation pattern helping here?

In the design-by-composition approach we have this collection of
elements:

camera
  - lens
  - housing
  - recording-medium(abstract)
       ^
       |
       ---------- 35mm or disk or 3x5 etc

A stylesheet application can process a camera element by delegating to
each subordinate element:

<xsl:template match="camera">
    <!-- delegate to lens element -->
    <xsl:apply-templates select="lens"/>
    <!-- delegate to housing element -->
    <xsl:apply-templates select="housing"/>
    <!-- delegate to whatever recording-medium component is present -->
    <xsl:apply-templates select="*[last()]"/>
</xsl:template>

As new types of recording-medium components are required we simply drop
in a template rule.  For example:

<xsl:template match="35mm">
  ... process 35mm recording-medium ...
</xsl:template>

<xsl:template match="disk">
  ... process disk recording-medium ...
</xsl:template>

<xsl:template match="3x5">
  ... process 3x5 recording-medium ...
</xsl:template>

All of these recording-medium components have a type that is the same
as, or derived from, the recording-medium-type.  Thus, if desired, we
could have a single template rule for all there recording-medium
components:

<xsl:template match="*[type() = 'recording-medium-type']">
  ... do some processing common to all recording-medium components ...
</xsl:template>

The important point is that an application can process the camera by
delegating to each of its subordinate elements.  /Roger
Received on Tuesday, 16 April 2002 10:24:23 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Tuesday, 11 January 2011 00:14:30 GMT