1.准備工作
1.1 下載ZIP
1.2 配置環境變量
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 .
}
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 操作
- 查詢數據下載:vc-db-2.rdf
/**
* 查詢 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 存在,則顯示
}
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,則顯示
}
/**
* 查詢 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
}
/**
* 查詢 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 )
}
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 }
}
參考資料: