"SPARQL"의 두 판 사이의 차이
khw
(새 문서: ==SPARQL== ==RDF Triplestore== RDF triplestore는 W3C에서 정의한 시맨틱 정보를 저장하는 그래프 데이터베이스의 형태 중 하나이다. 온톨로지라는 스...) |
(→Prefix) |
||
| (같은 사용자의 중간 판 3개는 보이지 않습니다) | |||
| 1번째 줄: | 1번째 줄: | ||
==SPARQL== | ==SPARQL== | ||
| − | ==RDF Triplestore== | + | ===RDF Triplestore=== |
RDF triplestore는 W3C에서 정의한 시맨틱 정보를 저장하는 그래프 데이터베이스의 형태 중 하나이다. 온톨로지라는 스키마 모델을 이용하며, 개체와 관계간의 계층 구조를 보여줄 수도 있다. | RDF triplestore는 W3C에서 정의한 시맨틱 정보를 저장하는 그래프 데이터베이스의 형태 중 하나이다. 온톨로지라는 스키마 모델을 이용하며, 개체와 관계간의 계층 구조를 보여줄 수도 있다. | ||
데이터와 아래와 같이 각 개체와 개체관의 관계를 보여주는, 3형식(Triple, Statement)으로 저장되기 때문에 Triple Store라 불린다. | 데이터와 아래와 같이 각 개체와 개체관의 관계를 보여주는, 3형식(Triple, Statement)으로 저장되기 때문에 Triple Store라 불린다. | ||
| 6번째 줄: | 6번째 줄: | ||
주어(Subject) --서술어(Predicate/Verb)--> 목적어(Object) | 주어(Subject) --서술어(Predicate/Verb)--> 목적어(Object) | ||
| − | ==LOD(Linked Open Data)== | + | ===LOD(Linked Open Data)=== |
*W3C에서 명시한 방법으로 구조화된, 서로 연결된, 웹(Web)상의 데이터로 RDF triple 형식을 이용한다. | *W3C에서 명시한 방법으로 구조화된, 서로 연결된, 웹(Web)상의 데이터로 RDF triple 형식을 이용한다. | ||
*개체(노드)의 ID으로 URL를 사용 | *개체(노드)의 ID으로 URL를 사용 | ||
| 12번째 줄: | 12번째 줄: | ||
**<small>개체 네이밍 관계어 : rdfs:label </small> | **<small>개체 네이밍 관계어 : rdfs:label </small> | ||
| − | ==Data Protery / Object Property== | + | ===Data Protery / Object Property=== |
*Data Propery : 특정 값으로 표현되는 속성 ex) Label | *Data Propery : 특정 값으로 표현되는 속성 ex) Label | ||
*Object Propery : 특정 개체로 연결되는 속성 -> ex) Creator | *Object Propery : 특정 개체로 연결되는 속성 -> ex) Creator | ||
| − | ==RDF 표현형식== | + | ===RDF 표현형식=== |
*Turtle | *Turtle | ||
ekc:조선_세종 dc:creator ekc:훈민정음 | ekc:조선_세종 dc:creator ekc:훈민정음 | ||
| 27번째 줄: | 27번째 줄: | ||
<nowiki><http://example.org/#spiderman> <http://www.perceive.net/schemas/relationship/enemyOf> <http://example.org/#green-goblin></nowiki> | <nowiki><http://example.org/#spiderman> <http://www.perceive.net/schemas/relationship/enemyOf> <http://example.org/#green-goblin></nowiki> | ||
| − | ==SPARQL== | + | ===SPARQL 문법=== |
| − | ===Prefix=== | + | ====Prefix==== |
데이터들이 어떤 층위에 속해 있는지를 지정해놓는 공간. 이름이 같은 데이터라도 층위에 따라 다른 의미를 가질 수 있다. | 데이터들이 어떤 층위에 속해 있는지를 지정해놓는 공간. 이름이 같은 데이터라도 층위에 따라 다른 의미를 가질 수 있다. | ||
| − | + | PREFIX skos: <http://www.w3.org/2004/02/skos/core#> | |
| − | + | PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> | |
| − | + | PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> | |
| − | + | PREFIX dc: <http://purl.org/dc/elements/1.1/> | |
| − | + | PREFIX dcterms: <http://purl.org/dc/terms/> | |
| − | + | PREFIX owl: <http://www.w3.org/2002/07/owl#> | |
| + | PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> | ||
| + | PREFIX foaf: <http://xmlns.com/foaf/0.1/> | ||
| + | PREFIX geo: <http://www.saltlux.com/geo/property#> | ||
| + | PREFIX edm: <http://www.europeana.eu/schemas/edm/> | ||
| + | PREFIX bibo: <http://purl.org/ontology/bibo/> | ||
| + | PREFIX ekc: <http://dh.aks.ac.kr/ontologies/ekc#> | ||
| + | PRDFIX ekci: <http://dh.aks.ac.kr/iri/ekc/> | ||
| − | ===기본형태=== | + | ====기본형태==== |
SELECT ?A(변수), ?B(변수) | SELECT ?A(변수), ?B(변수) | ||
WHERE | WHERE | ||
| 48번째 줄: | 55번째 줄: | ||
*'''||''' : or | *'''||''' : or | ||
| − | ===Filter=== | + | ====Filter==== |
*조건문, Where 대괄호 안에 넣어 검색할 개체가 가질 특정 조건을 부여 | *조건문, Where 대괄호 안에 넣어 검색할 개체가 가질 특정 조건을 부여 | ||
WHERE { FILTER( ?A >300; ?B = "title" ) } | WHERE { FILTER( ?A >300; ?B = "title" ) } | ||
| 56번째 줄: | 63번째 줄: | ||
<span style="color:DarkCyan"> filter regex( ?A, "^(BBB)") : 특정문구(BBB)로 시작하는 A</span><br/> | <span style="color:DarkCyan"> filter regex( ?A, "^(BBB)") : 특정문구(BBB)로 시작하는 A</span><br/> | ||
<span style="color:DarkCyan"> filter regex( ?A, "(BBB)$") : 특정문구(BBB)로 끝나는 A</span> | <span style="color:DarkCyan"> filter regex( ?A, "(BBB)$") : 특정문구(BBB)로 끝나는 A</span> | ||
| − | + | ====Filter와 함께 쓰는 기타 기능들==== | |
| − | ===Optional=== | + | {|class="wikitable |
| + | !명칭 !! 기능!!사용예시 | ||
| + | |- | ||
| + | |bound || 값이 있는 경우 is not null<br/>특정 값이 없는 경우 is null : !bound || FILTER(bound(?date)) | ||
| + | |- | ||
| + | |isLiteral || 값이 문자인 경우 || FILTER(isLiteral(?date)) | ||
| + | |- | ||
| + | |str || 값을 문자형태로 변환 || FILTER regex(str(?mbox), "@work.example") | ||
| + | |- | ||
| + | |lang || 값이 어느 언어를 사용하지를 명시(Languagage 태그)<br/>한국어 KO / 영어 EN / 일본어 JA / 중국-간체 ZH-HANS / 중국-번체 ZH-HANT || FILTER ( lang(?name) = "ES" ) | ||
| + | |} | ||
| + | ====Optional==== | ||
*추가사항, Where 대괄호 안에 넣어 검색할 개체를 보여주되, 특정 속성을 가진 경우 그 특정 속성을 보여줌 | *추가사항, Where 대괄호 안에 넣어 검색할 개체를 보여주되, 특정 속성을 가진 경우 그 특정 속성을 보여줌 | ||
WHERE { OPTIONAL( ?A prefix:title_ZH ?title_ZH)} | WHERE { OPTIONAL( ?A prefix:title_ZH ?title_ZH)} | ||
*filer와 함께 사용 가능 : <span style="color:darkcyan">OPTIONAL { ?x ns:price ?price . FILTER (?price < 30) }</span> | *filer와 함께 사용 가능 : <span style="color:darkcyan">OPTIONAL { ?x ns:price ?price . FILTER (?price < 30) }</span> | ||
| − | ===UNION=== | + | ====UNION==== |
*합집합, 값을 나란한 열이 아닌, 여러 행으로 보여줌 | *합집합, 값을 나란한 열이 아닌, 여러 행으로 보여줌 | ||
WHERE { { ?book dc10:title ?title } UNION { ?book dc11:title ?title } } | WHERE { { ?book dc10:title ?title } UNION { ?book dc11:title ?title } } | ||
| − | ===GRAPH / FROM === | + | ====GRAPH / FROM ==== |
*특정 개체의 주소(DB)을 나타낼 때 | *특정 개체의 주소(DB)을 나타낼 때 | ||
WHERE { GRAPH ?src { ?A rdfs:label ?name} } | WHERE { GRAPH ?src { ?A rdfs:label ?name} } | ||
| 71번째 줄: | 89번째 줄: | ||
FROM <http://example.org/foaf/aliceFoaf> | FROM <http://example.org/foaf/aliceFoaf> | ||
WHERE { ?x foaf:name ?name } | WHERE { ?x foaf:name ?name } | ||
| − | ===Order By / Limit / Offset=== | + | ====Order By / Limit / Offset==== |
*Order by : 정렬 / Limit : 값의 갯수 제한 / Offset: 값 중 몇개의 값을 제외 | *Order by : 정렬 / Limit : 값의 갯수 제한 / Offset: 값 중 몇개의 값을 제외 | ||
WHERE {?x rdfs:label ?title} | WHERE {?x rdfs:label ?title} | ||
| 77번째 줄: | 95번째 줄: | ||
limit 100 | limit 100 | ||
offset 50 | offset 50 | ||
| − | ===ASK=== | + | ====Distintct / Count ==== |
| + | *sql에서의 기능과 같음 / 특정 조건을 가진 개체의 갯수 | ||
| + | select distinct ?rel count(*) | ||
| + | where { ?a ?rel ?b. } | ||
| + | ====SERVICE==== | ||
| + | *다른 LOD 서비스와 연계하여 검색하기 | ||
| + | SELECT * | ||
| + | WHERE { | ||
| + | ?A owl:sameAs ?B . | ||
| + | SERVICE <http://lod.busan.go.kr/sparql/> { | ||
| + | ?B prefix:rel ?C ; | ||
| + | } | ||
| + | } | ||
| + | ====Update==== | ||
| + | *INSERT DATA { ?A rel ?B } | ||
| + | *DELETE DATA { ?A rel ?B } | ||
| + | *[DELETE { template }] [INSERT {template}] where {pattern} | ||
| + | *CLEAR GRAPH <uri> | ||
| + | *CREATE GRAPH <uri> | ||
| + | *DROP GRAPH <uri> | ||
| + | |||
| + | ====ASK==== | ||
*특정 조건에 해당하는 값이 있는지 없는지를 yes/no의 값으로 보여줌. | *특정 조건에 해당하는 값이 있는지 없는지를 yes/no의 값으로 보여줌. | ||
ASK { ?x foaf:name "Alice" } | ASK { ?x foaf:name "Alice" } | ||
| − | + | ||
| − | + | ===참고자료=== | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | === | ||
*[https://www.w3.org/2001/sw/DataAccess/rq23/ W3C SPARQL Query Language for RDF] | *[https://www.w3.org/2001/sw/DataAccess/rq23/ W3C SPARQL Query Language for RDF] | ||
| − | + | *[http://www.iro.umontreal.ca/~lapalme/ift6281/sparql-1_1-cheat-sheet.pdf SPARQL Cheat Sheet by LeeFeigenbaum] | |
| − | + | *[https://www.data.go.kr/participation/lodService/index.do 공공데이터LOD] | |
| − | * | ||
| − | |||
| − | * | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
2018년 2월 11일 (일) 01:18 기준 최신판
목차
SPARQL
RDF Triplestore
RDF triplestore는 W3C에서 정의한 시맨틱 정보를 저장하는 그래프 데이터베이스의 형태 중 하나이다. 온톨로지라는 스키마 모델을 이용하며, 개체와 관계간의 계층 구조를 보여줄 수도 있다. 데이터와 아래와 같이 각 개체와 개체관의 관계를 보여주는, 3형식(Triple, Statement)으로 저장되기 때문에 Triple Store라 불린다.
주어(Subject) --서술어(Predicate/Verb)--> 목적어(Object)
LOD(Linked Open Data)
- W3C에서 명시한 방법으로 구조화된, 서로 연결된, 웹(Web)상의 데이터로 RDF triple 형식을 이용한다.
- 개체(노드)의 ID으로 URL를 사용
- 클래스 정의용 관계어 : rdf:type / rdfs:subClassOf
- 개체 네이밍 관계어 : rdfs:label
Data Protery / Object Property
- Data Propery : 특정 값으로 표현되는 속성 ex) Label
- Object Propery : 특정 개체로 연결되는 속성 -> ex) Creator
RDF 표현형식
- Turtle
ekc:조선_세종 dc:creator ekc:훈민정음 <http://dh.aks.ac.kr/Encyves/resource/joseon_Sejong> rdfs:label "조선 세종"@kor
- RDF/XML
<ekc:joseon_Sejong rdfs:about="http://dh.aks.ac.kr/Encyves/resource/joseon_Sejong"/> <dc:creator rdf:resource="http://dh.aks.ac.kr/Encyves/resource/hunminjeongeum"/></span> <ekc:joseon_Sejong rdfs:about="http://dh.aks.ac.kr/Encyves/resource/joseon_Sejong"> <rdfs:label xml:lang="kor">조선 세종</rdfs:label></ekc:joseon_Sejong>
- N-Triples
<http://www.w3.org/2001/sw/RDFCore/ntriples/> <http://purl.org/dc/terms/title> "N-Triples"@en-US . <http://example.org/show/218> <http://www.w3.org/2000/01/rdf-schema#label> "That Seventies Show"^^<http://www.w3.org/2001/XMLSchema#string> <http://example.org/#spiderman> <http://www.perceive.net/schemas/relationship/enemyOf> <http://example.org/#green-goblin>
SPARQL 문법
Prefix
데이터들이 어떤 층위에 속해 있는지를 지정해놓는 공간. 이름이 같은 데이터라도 층위에 따라 다른 의미를 가질 수 있다.
PREFIX skos: <http://www.w3.org/2004/02/skos/core#> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX dc: <http://purl.org/dc/elements/1.1/> PREFIX dcterms: <http://purl.org/dc/terms/> PREFIX owl: <http://www.w3.org/2002/07/owl#> PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> PREFIX foaf: <http://xmlns.com/foaf/0.1/> PREFIX geo: <http://www.saltlux.com/geo/property#> PREFIX edm: <http://www.europeana.eu/schemas/edm/> PREFIX bibo: <http://purl.org/ontology/bibo/> PREFIX ekc: <http://dh.aks.ac.kr/ontologies/ekc#> PRDFIX ekci: <http://dh.aks.ac.kr/iri/ekc/>
기본형태
SELECT ?A(변수), ?B(변수)
WHERE
{ ?A(변수) Prefix:relation ?B(변수)
}
- ? : 변수의 앞에 붙임.(변수임을 표시)
- ; : 특정 변수에 조건을 추가할 때 (and)
- . : 기존에 선언된 변수와 관계 없이 새로운 개체나 조건을 명시할 때(end)
- && : and
- || : or
Filter
- 조건문, Where 대괄호 안에 넣어 검색할 개체가 가질 특정 조건을 부여
WHERE { FILTER( ?A >300; ?B = "title" ) }
- 정규표현식 사용
WHERE { FILTER REGEX( ?A, "정규표현식") }
filter regex( ?A, "(BBB)+") : 특정문구(BBB)가 포함된 A
filter regex( ?A, "^(BBB)") : 특정문구(BBB)로 시작하는 A
filter regex( ?A, "(BBB)$") : 특정문구(BBB)로 끝나는 A
Filter와 함께 쓰는 기타 기능들
| 명칭 | 기능 | 사용예시 |
|---|---|---|
| bound | 값이 있는 경우 is not null 특정 값이 없는 경우 is null : !bound |
FILTER(bound(?date)) |
| isLiteral | 값이 문자인 경우 | FILTER(isLiteral(?date)) |
| str | 값을 문자형태로 변환 | FILTER regex(str(?mbox), "@work.example") |
| lang | 값이 어느 언어를 사용하지를 명시(Languagage 태그) 한국어 KO / 영어 EN / 일본어 JA / 중국-간체 ZH-HANS / 중국-번체 ZH-HANT |
FILTER ( lang(?name) = "ES" ) |
Optional
- 추가사항, Where 대괄호 안에 넣어 검색할 개체를 보여주되, 특정 속성을 가진 경우 그 특정 속성을 보여줌
WHERE { OPTIONAL( ?A prefix:title_ZH ?title_ZH)}
- filer와 함께 사용 가능 : OPTIONAL { ?x ns:price ?price . FILTER (?price < 30) }
UNION
- 합집합, 값을 나란한 열이 아닌, 여러 행으로 보여줌
WHERE { { ?book dc10:title ?title } UNION { ?book dc11:title ?title } }
GRAPH / FROM
- 특정 개체의 주소(DB)을 나타낼 때
WHERE { GRAPH ?src { ?A rdfs:label ?name} }
- 특정 DB로 제한할 때
SELECT ?name FROM <http://example.org/foaf/aliceFoaf> WHERE { ?x foaf:name ?name }
Order By / Limit / Offset
- Order by : 정렬 / Limit : 값의 갯수 제한 / Offset: 값 중 몇개의 값을 제외
WHERE {?x rdfs:label ?title}
order by desc(?title)
limit 100
offset 50
Distintct / Count
- sql에서의 기능과 같음 / 특정 조건을 가진 개체의 갯수
select distinct ?rel count(*)
where { ?a ?rel ?b. }
SERVICE
- 다른 LOD 서비스와 연계하여 검색하기
SELECT *
WHERE {
?A owl:sameAs ?B .
SERVICE <http://lod.busan.go.kr/sparql/> {
?B prefix:rel ?C ;
}
}
Update
- INSERT DATA { ?A rel ?B }
- DELETE DATA { ?A rel ?B }
- [DELETE { template }] [INSERT {template}] where {pattern}
- CLEAR GRAPH <uri>
- CREATE GRAPH <uri>
- DROP GRAPH <uri>
ASK
- 특정 조건에 해당하는 값이 있는지 없는지를 yes/no의 값으로 보여줌.
ASK { ?x foaf:name "Alice" }