Hi there,
Sal and i we just had a short conversation about Topic Filtering, i just want to summerize the method i think we could use. Therefor i'm imagine a Brokered Network with Subscriber A, Broker B, and Publisher C. A subscribes at B and C is publishing his notifications to B. So B is the filtering instance.
--
First i want to summarize how i do Filtering based on XPath filters for WS-Eventing:
Filters for WS-E are (subset of) XPath expressions. So when B gets a notification from C, it starts filtering. All the subsriptions(filters) that are matching will get notified.
The Broker B has a statemachine(Yfilter). This statemachine contains all subscriptions(filters) as a set of states. for example:
/a/b are two states in the machine with one transition a->b. Now imagine there is a second Subscription(filter) which is /a/c,
so just a third state c is added and a transition from a->c. Both subscriptions are now sharing the state a, thats why its called shared path statemachine.
If a notification arrives, the statemachine is driven by parsing of the notification: for example
<a><c>hello</c></a>. First a is parsed ant the statemachine is in state a, now c is parsed and the machine makes a transition to c. After parsing, all endstates of the machine are matching filters/subscriptions and the notif is going to be forwarded to the subscriber.
This allows only one parsing for millions of filters to be applied. --
Now lets come to the WS-Topics filtering. Since WSN is using semantic filters, it is the other way round like in ws-eventing.
so we just use plains XPath evaluation:
Our Broker B has a TopicSpace XML document. like
<topicspace><topic name="sports"><topic name="tennis"/></topic></topicspace>
now a subscription is made via a TopicExpression: tns:sports/tennis
We could just add a subscriptionsTag to the topic tennis in our topicSpace:
<topicspace><topic name="sports"><topic name="tennis"><subscription epr="..." id=".."/></topic></topic></topicspace>
Now a notification arrives at the Broker. Every Notification has to specify ONE topic on which this notif is about with:
/wsnt:Notify/wsnt:NotificationMessage/wsnt:Topic
The notification is probably about tns:sports/tennis, so an XPath expr is created:
/topicspace/[EMAIL PROTECTED]'sports']/[EMAIL PROTECTED]'tennis']
This XPath expression is applied to the topicSpace XML DOM and
<subscription epr="..." id=".."/> is returned.
If multiple subscriptions are matching they are all returned by the XPath evaluation.
This technique just needs one XPath eval for millions of subscriptions.
What you think about that?
stefan
-- My place : http://user.cs.tu-berlin.de/~lischke
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
