Skip to main content

Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Difference between revisions of "IdAS String Filters"

(New page: ==Problem== While the current IFilter, IFilterAssertion (and sub-interfaces) are adequate to perform complex searches across an IdAS context, it is cumbersome to code to them. Furthermore...)
 
(Examples)
 
(8 intermediate revisions by the same user not shown)
Line 7: Line 7:
 
The following ABNF could be used to represent filters as strings.  Note that I simply looked at the way today's IFilter is and extrapolated an ABNF.
 
The following ABNF could be used to represent filters as strings.  Note that I simply looked at the way today's IFilter is and extrapolated an ABNF.
  
filter = LP filteritem RP
+
<pre>
filteritem = assertion / and / or / not
+
filter       = LP filteritem RP
assertion = comparator SP resource SP value
+
filteritem   = assertion / and / or / not
and = AMP 1*filter  
+
assertion   = attrpresent /
or = BAR 1*filter
+
              attreq /     
not = EXC filter
+
              attrge /     
comparator =
+
              attrle /     
resource =
+
              attrsub /   
value =
+
              eideq /     
 +
              etypeeq             
 +
and         = AMP 1*filter  
 +
or           = BAR 1*filter
 +
not         = EXC filter
 +
attrpresent  = "a:" resource ; matches when an entity has an attribute (named by resource) present
 +
attreq      = "a=:" resource SP value ; matches when an entity has an attribute (named by resource) with a value equal to value
 +
attrge      = "a>=:" resource SP value ; matches when an entity has an attribute (named by resource) with a value greater or equal to value
 +
attrle      = "a<=:" resource SP value ; matches when an entity has an attribute (named by resource) with a value less or equal to value
 +
attrsub      = "a*:" resource SP value ; matches when an entity has an attribute (named by resource) with a value containing a substring of value
 +
attrext      = "a(" matchrule ")" resource SP value ; matches when an entity has an attribute (named by resource) with a value matching value using the specified matchrule
 +
eideq        = "eid=:" SP entityid ; matches when an entity has the id specified in entityid
 +
etypeeq      = "etype=:" SP resource ; matches when an entity's type matches that specified in resource
 +
resource    = URI ; typically specifies an attribute ID or entity type
 +
value        = ; TODO: occurrences of RP must be escaped in values
 +
              ; TODO: how are complex attr's represented?
 +
              ; TODO: how are attr's on values represented?
 +
matchrule    = URI ; specifies a matching rule
 +
LP          = %x28 ; left paren ("(")
 +
RP          = %x29 ; right paren (")")
 +
SP          = %x20 ; space (" ")
 +
AMP          = %x26 ; ampersand ("&")
 +
BAR          = %x7C ; vertical bar or pipe ("|")
 +
EXC          = %x21 ; exclamation mark ("!")
 +
</pre>
 +
 
 +
====Examples====
 +
Match for any entity with a telephone number of 888-555-1212 or 888-123-4567
 +
<pre>
 +
(&(a=:http://example.org/attrs/phonenumber 888-555-1212)(a=:http://example.org/attrs/phonenumber 888-123-4567))
 +
</pre>
 +
Match entities who's first name is Robert, Bob, or Bobby
 +
<pre>
 +
(a(http://example.org/matchrules/nicknames):http://example.org/attributes/givenname Robert)
 +
</pre>
  
 
===XML===
 
===XML===

Latest revision as of 14:03, 30 July 2008

Problem

While the current IFilter, IFilterAssertion (and sub-interfaces) are adequate to perform complex searches across an IdAS context, it is cumbersome to code to them. Furthermore, there is currently no way to represent a filter using a string such that it could be passed easily across a wire protocol

Proposals

ABNF

The following ABNF could be used to represent filters as strings. Note that I simply looked at the way today's IFilter is and extrapolated an ABNF.

filter       = LP filteritem RP
filteritem   = assertion / and / or / not
assertion    = attrpresent / 
               attreq /      
               attrge /      
               attrle /      
               attrsub /     
               eideq /       
               etypeeq              
and          = AMP 1*filter 
or           = BAR 1*filter
not          = EXC filter
attrpresent  = "a:" resource ; matches when an entity has an attribute (named by resource) present
attreq       = "a=:" resource SP value ; matches when an entity has an attribute (named by resource) with a value equal to value
attrge       = "a>=:" resource SP value ; matches when an entity has an attribute (named by resource) with a value greater or equal to value
attrle       = "a<=:" resource SP value ; matches when an entity has an attribute (named by resource) with a value less or equal to value
attrsub      = "a*:" resource SP value ; matches when an entity has an attribute (named by resource) with a value containing a substring of value
attrext      = "a(" matchrule ")" resource SP value ; matches when an entity has an attribute (named by resource) with a value matching value using the specified matchrule
eideq        = "eid=:" SP entityid ; matches when an entity has the id specified in entityid
etypeeq      = "etype=:" SP resource ; matches when an entity's type matches that specified in resource
resource     = URI ; typically specifies an attribute ID or entity type
value        = ; TODO: occurrences of RP must be escaped in values
               ; TODO: how are complex attr's represented?
               ; TODO: how are attr's on values represented? 
matchrule    = URI ; specifies a matching rule
LP           = %x28 ; left paren ("(")
RP           = %x29 ; right paren (")")
SP           = %x20 ; space (" ")
AMP          = %x26 ; ampersand ("&")
BAR          = %x7C ; vertical bar or pipe ("|")
EXC          = %x21 ; exclamation mark ("!")

Examples

Match for any entity with a telephone number of 888-555-1212 or 888-123-4567

(&(a=:http://example.org/attrs/phonenumber 888-555-1212)(a=:http://example.org/attrs/phonenumber 888-123-4567))

Match entities who's first name is Robert, Bob, or Bobby

(a(http://example.org/matchrules/nicknames):http://example.org/attributes/givenname Robert)

XML

Back to the top