Christian,

This is really just a basic SPARQL question, nothing specific to SPIN. 

First, let me explain why your query behaves the way it does. Let's assume
you have the following triples

:r1 vocab:property_A "blue".
:r2 vocab:property_A "red".
:r3 vocab:property_B "blue".

When you run your query, you will get r2, but not r1 because there is a
triple with vocab:property_B predicate and an object different from "red"

:r3 vocab:property_B "blue". triple

You will not get r1 because no triple with vocab:property_B predicate has as
an object different from "blue"

If you now add a triple

:r4 vocab:property_B "green". or 
:r4 vocab:property_B "red". or 
:r3 vocab:property_B "green". - does not really matter as long as the
predicate is vocab:property_B and object is something other than "blue", the
query will return both, r1 and r2 because you now have a triple with
vocab:property_B predicate and an object different from "red" AND a triple
with vocab:property_B predicate and an object different from "blue"

What you need to do is something along these lines

CONSTRUCT {
    _:b0 a spin:ConstraintViolation .
    _:b0 spin:violationRoot ?this .
    _:b0 spin:violationPath vocab:property_A .
}
WHERE {
    ?this vocab:property_A ?A .
    OPTIONAL {?s2 vocab:property_B ?A} .
    FILTER (!bound(?s2)) .
}

Regards,

Irene

-----Original Message-----
From: [email protected]
[mailto:[email protected]] On Behalf Of Christian
Fuerber
Sent: Wednesday, January 13, 2010 4:17 PM
To: TopBraid Composer Users
Subject: [tbc-users] Matching Literals of different data type properties

Hi,
I'm trying to identify literals in a property A of class C1 that do not have
an identical literal in property B of class C2 using spin:constraint defined
in class C1. When I'm using the following query, it works as long as there
is only one resource with a literal for property B.

# Literal is not listed
CONSTRUCT {
    _:b0 a spin:ConstraintViolation .
    _:b0 spin:violationRoot ?this .
    _:b0 spin:violationPath vocab:property_A .
}
WHERE {
    ?this vocab:property_A ?A .
    ?s2 vocab:property_B ?B .
    FILTER (?A != ?B) .
}

If there is more than one resource with a literal for property B of class
C2, then every literal of property A is flagged by spin:constraint. But only
literals should be flagged that do not have an identical literal in property
B.

Thank you for any help with this problem!

Best,
Christian

-- 
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