我有以下turtle格式的RDF
@prefix ab: <http://learningsparql.com/ns/addressbook#> .
@prefix d: <http://learningsparql.com/ns/data#> .
d:i0432 ab:firstName "Richard" .
d:i0432 ab:lastName "Mutt" .
d:i0432 ab:homeTel "(229) 276-5135" .
d:i0432 ab:nick "Dick" .
d:i0432 ab:email "richard49@hotmail.com" .
d:i9771 ab:firstName "Cindy" .
d:i9771 ab:lastName "Marshall" .
d:i9771 ab:homeTel "(245) 646-5488" .
d:i9771 ab:email "cindym@gmail.com" .
d:i8301 ab:firstName "Craig" .
d:i8301 ab:lastName "Ellis" .
d:i8301 ab:workTel "(245) 315-5486" .
d:i8301 ab:email "craigellis@yahoo.com" .
d:i8301 ab:email "c.ellis@usairwaysgroup.com" .
查询条件是:
PREFIX ab: <http://learningsparql.com/ns/addressbook#>
SELECT ?first ?last
WHERE
{
?s ab:lastName ?last .
OPTIONAL {?s ab:nick ?first. }.
OPTIONAL {?s ab:firstName ?first .}.
}
结果是
------------------------
| first | last |
========================
| "Craig" | "Ellis" |
| "Cindy" | "Marshall" |
| "Dick" | "Mutt" |
------------------------
但是如果我将查询更改为
PREFIX ab: <http://learningsparql.com/ns/addressbook#>
SELECT ?first ?last
WHERE
{
OPTIONAL {?s ab:nick ?first. }.
OPTIONAL {?s ab:firstName ?first .}.
?s ab:lastName ?last .
}
结果为
-------------------
| first | last |
===================
| "Dick" | "Mutt" |
-------------------
有人能解释一下是什么原因造成了这种差异吗?我以为SPARQL查询中的句点和“and”操作符是一样的。