"SPARQL"의 두 판 사이의 차이

khw
이동: 둘러보기, 검색
(새 문서: ==SPARQL== ==RDF Triplestore== RDF triplestore는 W3C에서 정의한 시맨틱 정보를 저장하는 그래프 데이터베이스의 형태 중 하나이다. 온톨로지라는 스...)
(차이 없음)

2018년 2월 8일 (목) 14:54 판

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

데이터들이 어떤 층위에 속해 있는지를 지정해놓는 공간. 이름이 같은 데이터라도 층위에 따라 다른 의미를 가질 수 있다.

  • DC : Dublin Core, 서지정보 메타데이터[1]
  • FOAF : Friend of A Friend, 현대 사람들의 관계 기술 [2]
  • BIBO : Bibliographic Ontology, 책이나 잡지 등의 서지정보 [3]
  • SKOS : Simple Knowledge Organization System, 지식 어휘 체계*시소러스 [4]
  • EDM : Europeana Data Model, 유로피아나(유럽 박물관/미술관 통합 아카이브) [5]
  • RDFS : Resource Description Framework, RDF 구조를 표현하기 위한 지식표현 모델(클래스, 속성 정의)[6]

기본형태

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

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

ASK

  • 특정 조건에 해당하는 값이 있는지 없는지를 yes/no의 값으로 보여줌.
ASK  { ?x foaf:name  "Alice" }

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" )

기타 추가사항

사용예시

  • 부산문화관광LOD : 역린[7]
  • 부산문화관광LOD EndPoint : [8]
  • 부산문화관광LOD 기본 PREFIX :
PREFIX	ns: <http://lod.busan.go.kr/ontology/>
PREFIX	resource: <http://lod.busan.go.kr/resource/>
PREFIX	rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX	rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX	xsd:   <http://www.w3.org/2001/XMLSchema#>
PREFIX	foaf: <http://xmlns.com/foaf/0.1/>
PREFIX	skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX	schema: <http://schema.org/>
PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
  • 영화의 이름, 영문이름, 제작년도
select ?movie_title ?movie_title_en ?make_year
where{
?movie rdf:type ns:Movie; 
rdfs:label ?movie_title;
ns:title_en ?movie_title_en;
ns:makeYear ?make_year
} limit 50
  • 국제시장에 출연한 배우들은?
select * 
where{
?movie ns:hasActor ?actor;
rdfs:label ?movie_name.
?actor rdfs:label ?actor_name
filter(?movie_name="국제시장")
}
  • 개체의 이름과 해당 DB주소
select ?src ?name 
where{ graph ?src {
?some rdfs:label ?name
}} limit 100
  • 개채의 이름을 가나다순으로 정렬했을 때 상위 50위부터 100위까지 보여라
select ?name 
where{ ?some rdfs:label ?name} 
order by ?name
limit 50 offset 51