Re: Filtering out resources from a sequence that appear in another sequence

Hi Andy,

Thanks for your speedy reply.


> FILTER tests the values of a variable in the current row, not all possible
> values of a variable anywhere.


Ah, I had failed to grasp this. I thought rows were a relational db concept
I didn't need to worry about anymore ;-)

So in applying a filter we are iterating over the values in the result set
and applying the filter to each value in turn.


> What you need to do is check the data to see if what ever value ?child
> has, then it is not used as an ancestor.  The value of ?ancestor in the row
> is only one match, not all matches.
>
>
Unfortunately any child can also be an ancestor of something (i.e. the
ancestor of something else I am not interested in) so I need to be more
selective than this. However by using the ?export value (of which I know
there is only one) I can find the ancestor that is also a member of the
export using...

FILTER EXISTS { ?export rdfs:member ?ancestor }

Although I am still not clear why...

FILTER( ?ancestor IN ( ?member ) )

...doesn't work as an export can have many members (although it may only
have one).

Anyway, the following query is now giving me the results I expect:

DESCRIBE ?child
WHERE
{
    ?export rdfs:member ?member ;
    OPTIONAL
    {
{
            SELECT ?ancestor
            WHERE
            {
                BIND(URI("
http://nationalarchives.gov.uk/dri/catalogue/item/c2433752-b1e5-44e4-a271-c36d29aa6a3b")
AS ?deselected)
                # get the ancestors of the deselected item
  ?deselected dri:parent+ ?ancestor .
 # get the ancestor that is a member of the export list
FILTER EXISTS { ?export rdfs:member ?ancestor } .
  }
    }
        # get all of the children of the ancestor/member
?child dri:parent ?ancestor .
FILTER NOT EXISTS { ?deselected dri:parent+ ?child } .
    }
}

As you say, FILTER EXISTS and FILTER NOT EXISTS are the key :-)

Thanks for your help.

Rob

-- 

Rob Walpole
Email robkwalpole@gmail.com
Tel. +44 (0)7969 869881
Skype: RobertWalpolehttp://www.linkedin.com/in/robwalpole

Received on Monday, 28 January 2013 15:55:20 UTC