1.准备工作

1.1 下载ZIP

SPARQL 入门教程-LMLPHP

1.2 配置环境变量

SPARQL 入门教程-LMLPHP

1.3 查询文件

2. 查询操作

2.1 普通查询

/**
* 查询family为“Smith”的 GivenName
*/ // 前缀声明
PREFIX vcard: <http://www.w3.org/2001/vcard-rdf/3.0#> SELECT ?givenName
WHERE
{ ?y vcard:Family "Smith" .
?y vcard:Given ?givenName .
}

SPARQL 入门教程-LMLPHP

2.2 正则表达式查询

  • 语法:FILTER regex(?x, "pattern", [,"flags"])
  • "flags":是可选操作;
/**
* 查找GivenName中含有“r”的结果
*/ // 前缀声明
PREFIX vcard: <http://www.w3.org/2001/vcard-rdf/3.0#> SELECT ?g
WHERE
{
?y vcard:Given ?g .
FILTER regex(?g, "r", "i") // 其中“i”,对应“flags”,表示忽略大小写
}

2.3 OPTIONAL 操作

/**
* 查询 name 字段,若 age 字段存在,也需要显示;
*/ // 前缀声明
PREFIX info: <http://somewhere/peopleInfo#>
PREFIX vcard: <http://www.w3.org/2001/vcard-rdf/3.0#> SELECT ?name ?age
WHERE
{
?person vcard:FN ?name .
OPTIONAL { ?person info:age ?age } // 若 age 存在,则显示
}

SPARQL 入门教程-LMLPHP

2.4 OPTIONAL 和 FILTER 操作

/**
* 查询 name 字段,若 age 字段存在,且大于24岁,则显示
*/ PREFIX info: <http://somewhere/peopleInfo#>
PREFIX vcard: <http://www.w3.org/2001/vcard-rdf/3.0#> SELECT ?name ?age
WHERE
{
?person vcard:FN ?name .
OPTIONAL { ?person info:age ?age . FILTER ( ?age > 24 ) } // 若 age 存在,且大于24,则显示
}

SPARQL 入门教程-LMLPHP

/**
* 查询 name 字段,只显示 age 字段存在,且大于24岁的
*/ PREFIX info: <http://somewhere/peopleInfo#>
PREFIX vcard: <http://www.w3.org/2001/vcard-rdf/3.0#> SELECT ?name ?age
WHERE
{
?person vcard:FN ?name .
OPTIONAL { ?person info:age ?age . } // 若 age 存在,则显示
FILTER ( ?age > 24 ) // FILTER 独立于 OPTIONAL
}

SPARQL 入门教程-LMLPHP

/**
* 查询 name 字段,若 age 字段存在,且大于24岁,或者不存在 age 字段的
*/ PREFIX info: <http://somewhere/peopleInfo#>
PREFIX vcard: <http://www.w3.org/2001/vcard-rdf/3.0#> SELECT ?name ?age
WHERE
{
?person vcard:FN ?name .
OPTIONAL { ?person info:age ?age . } // 若 age 存在,则显示
FILTER ( !bound(?age) || ?age > 24 )
}

SPARQL 入门教程-LMLPHP

2.5 UNION 操作

PREFIX foaf:    <http://xmlns.com/foaf/0.1/>
PREFIX vCard: <http://www.w3.org/2001/vcard-rdf/3.0#> SELECT ?name1 ?name2
WHERE
{
{ [] foaf:name ?name1 } UNION { [] vCard:FN ?name2 }
}

参考资料:

05-11 14:47