[XML-DEV Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: XPattern Specification


xmlpathcontext
Alan Gutierrez wrote:
> * Karl Waclawek <karl@w...> [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?

If one "language" needs to interact with multiple other
languages, then what we are talking about is multiple
"lanuage bindings".

>>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 am using an API I have developed mostly for myself
(although open sourced). Whenever I match an element,
call-backs are made on one of these interfaces (C# with generics):

   public interface IXmlHandler<S> where S: EventStatus
   {
     void Reset();
     void ProcessingInstruction(string target, string data, S status);
     void SkippedEntity(string name, S status);
   }

   public interface IDocHandler<S>: IXmlHandler<S> where S: EventStatus
   {
     void StartDocument(object context, S status);
     void EndDocument(S status);
     void StartRoot(QName name, IAttributes attributes, S status);
     void EndRoot(S status);
   }

   public interface IElementHandler<C, N, S>: IXmlHandler<S>
       where C: XmlPathContext<C, N, S>
       where N: XmlPathNode<N, C, S>
       where S: EventStatus
   {
     // context is valid until Deactivate is called, but attributes is only
     // valid during the call to Activate
     void Activate(C context, QName name, IAttributes attributes, S status);
     void Characters(char[] chars, int start, int length, S status);
     void IgnorableWhitespace(char[] ws, int start, int length, S status);
     // called before child is activated
     void StartChild(QName name, IAttributes attributes, S status);
     // called after child is deactivated
     void EndChild(S status);
     void Deactivate(S status);
   }

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

Some events for the API above would be (matching on /document/reverse):

- Activate(..., "reverse",...)
- one or more Characters() calls
- Deactivate(...)

In the Deactivate event the handler would emit:
         <reverse>Alan</reverse>
         <reversed>nalA</reversed>

The handler wouldbe derived from an existing helper class, which
performs character buffering.

For that task that would be all the pattern matching language and
API support I would need. Maybe there is a danger of overengineering
in this discussion?

Karl

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
 

Stylus Studio has published XML-DEV in RSS and ATOM formats, enabling users to easily subcribe to the list from their preferred news reader application.


Stylus Studio Sponsored Links are added links designed to provide related and additional information to the visitors of this website. they were not included by the author in the initial post. To view the content without the Sponsor Links please click here.

Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.