先說一下sparql可以做什麼?
1.可以從半結構化和結構化的數據中提取
2.通過查詢未知的關係可以挖掘數據
3.使用單一簡單的查詢在分散的數據庫中執行
4.將RDF數據轉化成其他詞語
# prefix declarations 前綴聲明
example:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX owl: <http://www.w3.org/2002/07/owl#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> ... # dataset definition 定義數據集可以減少查詢範圍 FROM ... # result clause SELECT ?p 或者* # query pattern WHERE { ... } # query modifiers ORDER BY ...
1. rdf:type是謂詞時可以用a代替
SELECT * WHERE { [] a ?o} a==rdfs:type ?o==$o
select * where {?s rdfs:subClassOf ?p}
2. SELECT * WHERE { [] a ?o filter regex(str(?o) , "Disorder","i")}
用filter進行過濾 ,regex表示正則表達式,,i表示不區分大小寫。網上沒有用str,但是我查詢不出來,用上str就有結果了
3.可選值
select ?x
where {?x rdfs:subClassOf ?y
Optional{ ?x rdfs:domain ?o}} option 也可以省略
4.SELECT ?title ?price WHERE {
?x rdfs:subClassOf ?y
Optional{ ?x rdfs:domain ?o filter(?o<3) }}
}
5.去掉重複部分,像sql一樣 加distinct
SELECT DISTINCT ?name WHERE { ?x rdfs:domain ?name }6.order by 查詢
SELECT DISTINCT ?name WHERE { ?x rdfs:domain ?name } order by ?name
7.union 兩者選一
select ?x
where {
{?x rdfs:subClassOf ?y}
union
{?x rdfs:domain ?o}
}
供自己查閱的,還是 菜鳥一枚,等之後再修改提升