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

 


Help: OASIS Mailing Lists Help | MarkMail Help

 


 

   Streaming Transformations for XML

[ Lists Home | Date Index | Thread Index ]

I'm playing with an idea of a streaming transformation language. I don't 
mean things like forward-only streamable subsets of XSLT or building 
subtrees on request only, but an alternative language designed for 
streaming transformations. From a bit different point of view, it would 
be a language to define SAX filters.

Such a hypothetic languge (let me call it STX) could use an XML, 
XSLT-like syntax with templates. However, the meaning of templates would 
be quite different from this of XSLT. Matching expressions could 
consists of SAX-related axes and simple, XPath-like identifier, for example.

STX transformations will be, of course, much less powerful than XSLT; it 
will be as powerful as a SAX filter can be. On the other hand, the new 
language could provide an memory inexpensive way to handle simplier 
transformation.

Instead of a BNF definition, I append an example processed by 
non-existing STX processor. It should provide you with some very basic 
feeling about a possible syntax and semantics of the language.

I wonder whether the benefits of having simple streaming transformations 
worth to learn a new language (and to implement a processor). Also, I 
haven't been able to find a similar solution or idea on the Net, but I 
expect there must a similar effort in the huge XML community. So, any 
pointers are welcome to prevent me from reinventing the wheel.

Regards,
Petr

--------------

* Example

** Transformation:

<stx:transform xmlns:stx="some_namespace_here">

  <stx:variable name="date" select="'Monday'"/>

  <stx:template match="element-start::list">
    <stx:copy-of attributes="all">
      <stx:attribute name="date" select="$date"/>
    </stx:copy-of>
  </stx:template>

  <stx:template match="element-end::list">
    <stx:copy-of/>
  </stx:template>

  <stx:template match="element-start::item">
    <stx:copy-of/>
    <id><stx:value-of select="@id"/></id>
    <stx:if test="@id=2">
      <note>the item we have been looking for</note>
    </stx:if>
  </stx:template>

  <stx:template match="element-end::item">
    <date><stx:value-of select="$date"/></date>
    <stx:copy-of/>
  </stx:template>

  <stx:template match="character::*">
    <text><stx:copy-of/></text>
  </stx:template>

</stx:transform>

** Input data:

<list id="19">
  <item id="1">A</item>
  <item id="2">B</item>
  <item id="3">C</item>
</list>

** Output:

<list id="19" date="Monday">
  <item>
    <id>1</id>
    <text>A</text>
    <date>Monday</date>
  </item>
  <item>
    <id>2</id>
    <note>the item we have been looking for</note>	
    <text>B</text>
    <date>Monday</date>
  </item>
  <item>
    <id>3</id>
    <text>C</text>
    <date>Monday</date>
  </item>
</list>

-- 
Petr Cimprich
Ginger Alliance
www.gingerall.com






 

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

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