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] XPattern Specification

[ Lists Home | Date Index | Thread Index ]

* Karl Waclawek <karl@waclawek.net> [2005-01-17 09:16]:

>  > 4. Position counters (to enable position predicates and
>  > position()
> >function)
> 
> Especially for a streaming processor, should the goal of a pattern
> matching language not be, to allow for flexible cooperation
> between what the language does and what the handlers do?

    Brings me back to my suggestion for a generic XPath binding API.

    public interface Function {
        public Node invoke(NodeList arguments);
    }

    Works for Java.

    What works across all languages?

> Predicate evaluation could also be performed in the handler
> call-backs.  So, maybe the XPattern language could provide for
> simple attribute value matching, but leave more difficult tasks to
> the call-back handlers, which can take advantage of a Turing
> complete language, and which can also easliy interact with
> application context (e.g  if our database has a record for this
> id, return true, otherwise return false).  And there should be a
> specified way for how the handlers return results for predicate
> evaluation.

    I'm of that mind set. I like this proposal.
    
    I'd like to match information, then respond with Java. My
    example, simplified.

    <document>
        <reverse>Alan</reverse>
    </dcoument>

    Transformed to:

    <document>
        <reverse>Alan</reverse>
        <reversed>nalA</reversed>
    </document>


    I'm looking to notified of a reverse element, and to be notified
    of the end of the reverse element, so I can insert the reversed
    element. This isn't really node matching, but event matching.

    + = open, - = close, () = capture, [] = emit

    +document
        +reverse (foo) -reverse
       [+reversed &util::reverse($foo) -reversed]

    XPathy / STXish / XUpdatish:
    
        <xp:capture name="foo" select="/document/reverse"/>
        <xp:insert-after match="/document/reverse">
            <reversed><xp:value-of select="util::reverse($foo)"/></reversed>
        </xp:insert-after>

    or

    <xp:when match="/document/reverse">

        <xp:capture name="foo" select="text()"/>

        <xp:insert-after match="/document/reverse">
            <reversed><xp:value-of select="util::reverse($foo)"/></reversed>
        </xp:insert-after>

        <!-- Obviously, once could replace also. -->
    </xp:when>

    Actually, the above might not be XPattern, but still...

    Thinking more in terms of pattern matching, less in terms of
    document traversal.

--
Alan Gutierrez - alan@engrm.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