- From: Andy Seaborne <andy.seaborne@talis.com>
- Date: Mon, 05 Jul 2010 22:49:06 +0100
- To: Chimezie Ogbuji <ogbujic@ccf.org>
- CC: SPARQL Working Group WG <public-rdf-dawg@w3.org>
On 29/06/2010 3:25 PM, Chimezie Ogbuji wrote:
> This discharges my action ( Action-194 ) to collect testcases for negation:
>
> Test case 1.1: Subsets by exclusion (NOT EXISTS)
>
> ==== Data
> @prefix ex<negation/subset-exclusion#> .
Bad syntax. This is repeated in all the data.
> ex:lifeForm1 a ex:Mammal, ex:Animal .
> ex:lifeForm2 a ex:Reptile, ex:Animal .
> ex:lifeForm3 a ex:Insect, ex:Animal .
> ====
>
> ==== Query
> PREFIX ex:<negation/subset-exclusion#>
> SELECT ?animal {
> ?animal a ex:Animal
> FILTER NOT EXISTS { ?animal a ex:Insect }
> }
> ====
>
> ==== Solutions
> ----------------
> | animal |
> ================
> | ex:lifeForm1 |
> ================
> | ex:lifeForm2 |
> ----------------
Agree
> ====
>
> Test case 1.2: Subsets by exclusion (MINUS)
>
> ==== Data
> @prefix ex<negation/subset-exclusion#> .
> ex:lifeForm1 a ex:Mammal, ex:Animal .
> ex:lifeForm2 a ex:Reptile, ex:Animal .
> ex:lifeForm3 a ex:Insect, ex:Animal .
> ====
>
> ==== Query
> PREFIX ex:<negation/subset-exclusion#>
> SELECT ?animal {
> ?animal a ex:Animal MINUS {
> ?animal a ?type
> FILTER(?type = ex:Reptile&& ?type = ex:Insect)
> }
> }
> ====
>
> ==== Solutions
> ----------------
> | animal |
> ================
> | ex:lifeForm1 |
> ----------------
I don't agree with this.
FILTER(?type = ex:Reptile&& ?type = ex:Insect)
can't be true.
----------------
| animal |
================
| ex:lifeForm3 |
| ex:lifeForm2 |
| ex:lifeForm1 |
----------------
Did you mean ||:
FILTER(?type = ex:Reptile || ?type = ex:Insect)
----------------
| animal |
================
| ex:lifeForm1 |
----------------
> ====
>
> Test case 2.1: Medical, temporal proximity by exclusion (NOT EXISTS)
>
> ==== Data
> @prefix ex<negation/temporal-exclusion#> .
> @prefix dc<http://purl.org/dc/elements/1.1/> .
> @prefix xsd<http://www.w3.org/2001/XMLSchema#> .
> ex:examination1 a ex:PhysicalExamination;
> dc:date "2010-01-10"^^xsd:date .
> ex:operation1 a ex:SurgicalProcedure;
> dc:date "2010-01-15"^^xsd:date .
> ex:examination2 a ex:PhysicalExamination;
> dc:date "2010-01-02"^^xsd:date .
> ex:examination1 ex:precedes ex:operation1 .
> ex:examination2 ex:precedes ex:operation1 .
> ex:examination2 ex:precedes ex:examintion1 .
> ====
>
> ==== Query
> PREFIX ex:<negation/temporal-exclusion#>
> PREFIX dc:<http://purl.org/dc/elements/1.1/>
> # The closest pre-operative physical examination
> SELECT ?exam ?date {
> ?exam a ex:PhysicalExamination;
> dc:date ?date;
> ex:precedes ex:operation1 .
> ?op a ex:SurgicalProcedure; dc:date ?opDT .
> FILTER NOT EXISTS {
> ?otherExam a ex:PhysicalExamination;
> ex:follows ?exam;
> ex:precedes ex:operation1
> }
> }
> ====
>
> ==== Solutions
> --------------------------------------------
> | exam | date |
> ============================================
> | ex:examination1 | "2010-01-10"^^xsd:date |
> --------------------------------------------
> ====
I don't agree with this.
No predicate ex:follows is in the data so FILTER NOT EXISTS { } can't match.
--------------------------------------------
| exam | date |
============================================
| ex:examination2 | "2010-01-02"^^xsd:date |
| ex:examination1 | "2010-01-10"^^xsd:date |
--------------------------------------------
>
> Test case 2.2: Medical, temporal proximity by exclusion (MINUS)
>
> ==== Data
> @prefix ex<negation/temporal-exclusion#> .
> @prefix dc<http://purl.org/dc/elements/1.1/> .
> @prefix xsd<http://www.w3.org/2001/XMLSchema#> .
> ex:examination1 a ex:PhysicalExamination;
> dc:date "2010-02-10"^^xsd:date .
> ex:operation1 a ex:SurgicalProcedure;
> dc:date "2010-03-20"^^xsd:date .
> ex:examination2 a ex:PhysicalExamination;
> dc:date "2010-03-11"^^xsd:date .
> ====
>
> ==== Query
> PREFIX ex:<negation/temporal-exclusion#>
> PREFIX dc:<http://purl.org/dc/elements/1.1/>
> # The closest pre-operative physical examination
> SELECT ?exam ?date {
> ?exam a ex:PhysicalExamination;
> dc:date ?date .
> ?op a ex:SurgicalProcedure; dc:date ?opDT .
> MINUS {
> ?otherExam a ex:PhysicalExamination; dc:date ?otherExDT
> FILTER(?date< ?otherExDT&& ?otherExDT< ?opDT)
> }
> FILTER(?date< ?opDT)
> }
> ====
>
> ==== Solutions
> --------------------------------------------
> | exam | date |
> ============================================
> | ex:examination2 | "2010-03-11"^^xsd:date |
> --------------------------------------------
> ====
I don't agree with this.
The matching part of the MINUS is:
{ ?otherExam a ex:PhysicalExamination; dc:date ?otherExDT } gives:
and then the FILTER:
FILTER(?date< ?otherExDT&& ?otherExDT< ?opDT)
uses ?date which is out of scope for the clause MINUS so the FILTER is
error always so nothing matches for MINUS {}
For s/MINUS/FILTER NOT EXISTS/, I get:
--------------------------------------------
| exam | date |
============================================
| ex:examination2 | "2010-03-11"^^xsd:date |
--------------------------------------------
Andy
Received on Monday, 5 July 2010 21:49:37 UTC