Jeff,

wouldn't it be sufficient to add a FILTER bound(?var) after the  
function call?

Holger


On May 28, 2009, at 7:06 AM, Schmitz, Jeffrey A wrote:

>
> "The function returns no binding and therefore ?user is unbound and  
> will
> be
> iterating over all possible subjects of the firstName triples."
>
> Hmmm, not what I was expecting.  I guess I would have expected it to  
> act
> more like normal SPARQL variable chaining occurrs, e.g. in the  
> following
> query:
>
> SELECT ?user ?value
> WHERE {?user a :NonExistantClass .
>       ?user :firstName ?value}
>
> ?user is "unbound" after the first line (NonExistantClass doesn't  
> really
> exist), and this query returns no results instead of everything in the
> model with a firstName property.  Even if you reverse the order:
>
> SELECT ?user ?value
> WHERE {?user :firstName ?value .
>       ?user a :NonExistantClass .
>       }
>
> You still get no results.  But change it to something like:
>
> SELECT ?user ?value
> WHERE {(LET ?user := :filterOnClass(:NonExistantClass)
>        ?user :firstName ?value}
>
> And you do get everything in the model with a firstName property.
>
> Be that as it may, using subqueries I think I'm able to get the  
> behavior
> I'm looking for.  A little verbose, but if I understand things, I  
> think
> you'd have to do this anytime you wanted to use a re-usable SPIN
> filtering function:
>
>
> SELECT ?user ?value
> {
>    {SELECT ?user
>      WHERE {
>          LET(?user :=  
> ModelManagement:getProjectUser("DEFAULT_PROJECT",
> "xxx"))
>      }
>    }
>    {SELECT ?user ?value
>      WHERE {
>         ?user ModelManagement:firstName ?value
>      }
>   }
> }
>
> In the above query, if the user specified in the LET (xxx) doesn't
> exist, nothing is returned.
>
>
>> -----Original Message-----
>> From: Holger Knublauch [mailto:[email protected]]
>> Sent: Wednesday, May 27, 2009 9:38 PM
>> To: [email protected]
>> Subject: [tbc-users] Re: [SPIN] Using FILTER with function arguments
>>
>>
>>
>> On May 27, 2009, at 12:21 PM, Schmitz, Jeffrey A wrote:
>>
>>>
>>> It's getting curiousor and curiousor...
>>>
>>> Using the TBC SPARQL tab, when I call a function that filters
>>> according to an argument, e.g.:
>>>
>>> SELECT ?user
>>> WHERE {
>>>   ?project ModelManagement:hasUser ?user .
>>>   ?user Common:name ?username .
>>>   FILTER (?username = ?arg1) .
>>> }
>>
>> If the function returns no binding then it will be comparable
>> to a wildcard in the query below.
>>
>>>
>>>
>>> As long as I pass in an argument that has a match:
>>>
>>> SELECT ?value
>>> WHERE {LET(?user := ModelManagement:getProjectUser("john"))
>>>              ?user ModelManagement:firstName ?value}
>>>
>>> the function returns just one result as expected (in this case for
>>> some
>>> reason the blank result rows aren't returned).  However, if I pass
>>> in a
>>> value that has NO matches:
>>>
>>> SELECT ?value
>>> WHERE {LET(?user := ModelManagement:getProjectUser("xxx"))
>>>              ?user ModelManagement:firstName ?value}
>>>
>>>
>>> It acts like the FILTER statement isn't there, and all
>> User's names in
>>> the model are returned.  I would have expected no results to be
>>> returned.  Btw, I'm seeing this same behavior in my code too.  Am I
>>> thinking about this wrong, or is there perhaps a problem with how
>>> FILTER
>>> works within a Function?
>>
>> No, the behavior is correct (as far as I understand your
>> example). The
>> function returns no binding and therefore ?user is unbound
>> and will be
>> iterating over all possible subjects of the firstName triples.
>>
>> In your first email, please keep in mind that the execution order of
>> ARQ might be different from what you have typed it. In particular, I
>> find often that LET statements are executed at the end, and
>> therefore
>> lead to more iterations than expected.
>>
>> Holger
>>
>>
>>>
>>
>
> >


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"TopBraid Composer Users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/topbraid-composer-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to