Virtoso(OSS 버전) docker 시작
Virtoso(OSS 버전) docker를 시작합니다.
RDF와 SPARQL을 배우기 위해 SPARQL 서버를 설정할 때의 노트입니다.
Virtoso는 OPEN LINK SOFTWARE사가 생산한 스파르QL 서버로 인기가 많아서 사용합니다.
docker에도 몇 개의 환경이 등록되어 있는 것 같습니다.OFFICAL의 인상은 없습니다.
환경은 CentOS 7.3.1611, docker-11.2.6
환경 구조
이미지 가져오기
이후 같은 환경을 재현하기 위해 기본적으로 표시로 이미지를 얻는다.$ docker search Virtuoso
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/tenforce/virtuoso Docker for hosting Virtuoso. 27 [OK]
docker.io docker.io/tenforce/ods-virtuoso RDF triple store with 15 catalogs in dcat-ap 5 [OK]
docker.io docker.io/inutano/virtuoso Virtuoso Opensource 3 [OK]
docker.io docker.io/nicholsn/virtuoso 3 [OK]
docker.io docker.io/stain/virtuoso Virtuoso 7 (stable) Open Source Edition on... 2 [OK]
$ docker pull tenforce/virtuoso:1.1.1-virtuoso7.2.4
Digest: sha256:759e0de994078f3a59d32e1e868892d7a0e643b4452ef5f964bafe1fa5edae63
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/tenforce/virtuoso 1.1.1-virtuoso7.2.4 37254352698c 4 weeks ago 502.5 MB
Virtoso 시작
VOLUME에서 영구 영역을 확인하고 Virtuoso를 시작합니다.시작 옵션Docker 페이지
에 기술된 것을 참고로 한다.$ docker volume create --name main-virtuoso-data
main-virtuoso-data
$ docker volume ls
DRIVER VOLUME NAME
local main-virtuoso-data
$ docker run -d --restart=always --name main-virtuoso \
-p 8890:8890 -p 1111:1111 \
-e DBA_PASSWORD=dba \
-e SPARQL_UPDATE=true \
-e DEFAULT_GRAPH=http://www.example.com/graph \
-v main-virtuoso-data:/data \
-d tenforce/virtuoso:1.1.1-virtuoso7.2.4
7f73ea2c9f38bb6c36b7ee56032d2647ee13522580ed716907a3bbb555eb2632
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7f73ea2c9f38 tenforce/virtuoso:1.1.1-virtuoso7.2.4 "/bin/bash /virtuoso." 15 seconds ago Up 14 seconds 0.0.0.0:1111->1111/tcp, 0.0.0.0:8890->8890/tcp main-virtuoso
1111 명령줄(isql-vt)용 포트
8890은 웹 인터페이스용 포트 번호입니다.
CentOS에서 Virtosohttp://192.168.45.131:8890/를 액세스합니다.Hub OS에 GUI가 설치되어 있지 않으므로 다른 곳에서 액세스할 수 있습니다.
호스트 측 도구 설치
호스트 측면에 CUI 도구를 설치합니다.이를 통해 CUI 명령(isql-vt)을 사용할 수 있습니다.$ sudo yum install virtuoso-opensource-utils
RDF 데이터 등록 방법
GUI에서 데이터 로그인
참조RDF 데이터를 Virtoso에 로드하여 SPARQL을 통해 검색 등록 데이터.
접근 http://192.168.45.131:8890/conductor/, 기본 계정dba로 로그인하고, 비밀번호는docker가 시작할 때 지정한dba를 지정합니다.
로그인한 후 [Linked Data] – [Quad Store Upad]에서 데이터를 업로드하는 화면을 엽니다.
참고할 페이지는virtuoso의 버전 6입니다.x계열 탓인지'RDF'가 됐지만, 사용된 이미지는 7.2.4에서'링크드 데이터'로 바뀌었다.
CUI에서 데이터 로그인
DBPedia Japan 공개데이터에서'20160407/jawiki-2060407-article-categories.ttl.bz2에 투입해 보세요.
읽을 텍스트 형식에 따라 서버를 지정해야 합니다.
$ docker search Virtuoso
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/tenforce/virtuoso Docker for hosting Virtuoso. 27 [OK]
docker.io docker.io/tenforce/ods-virtuoso RDF triple store with 15 catalogs in dcat-ap 5 [OK]
docker.io docker.io/inutano/virtuoso Virtuoso Opensource 3 [OK]
docker.io docker.io/nicholsn/virtuoso 3 [OK]
docker.io docker.io/stain/virtuoso Virtuoso 7 (stable) Open Source Edition on... 2 [OK]
$ docker pull tenforce/virtuoso:1.1.1-virtuoso7.2.4
Digest: sha256:759e0de994078f3a59d32e1e868892d7a0e643b4452ef5f964bafe1fa5edae63
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/tenforce/virtuoso 1.1.1-virtuoso7.2.4 37254352698c 4 weeks ago 502.5 MB
$ docker volume create --name main-virtuoso-data
main-virtuoso-data
$ docker volume ls
DRIVER VOLUME NAME
local main-virtuoso-data
$ docker run -d --restart=always --name main-virtuoso \
-p 8890:8890 -p 1111:1111 \
-e DBA_PASSWORD=dba \
-e SPARQL_UPDATE=true \
-e DEFAULT_GRAPH=http://www.example.com/graph \
-v main-virtuoso-data:/data \
-d tenforce/virtuoso:1.1.1-virtuoso7.2.4
7f73ea2c9f38bb6c36b7ee56032d2647ee13522580ed716907a3bbb555eb2632
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7f73ea2c9f38 tenforce/virtuoso:1.1.1-virtuoso7.2.4 "/bin/bash /virtuoso." 15 seconds ago Up 14 seconds 0.0.0.0:1111->1111/tcp, 0.0.0.0:8890->8890/tcp main-virtuoso
$ sudo yum install virtuoso-opensource-utils
TTLP_MT...TTL(TURTLE), TTL(N-Tripple) 또는 NQ(N-quad)를 제거
RDF_LOAD_RDFXML_MT...RDF/XML 텍스트를 RDF 트리플 시퀀스의 보라색
호스트에서 읽기 명령을 실행하면 다음 오류가 발생합니다.
$ isql-vt -U dba -P dba
SQL> DB.DBA.TTLP_MT (file_to_string_output ('jawiki-20160407-article-categories.ttl'), '', 'http://example.com/', 512);
*** Error 42000: [Virtuoso Driver][Virtuoso Server]FA112: Can't stat file 'jawiki-20160407-article-categories.ttl', error (2) : No such file or directory
strace 명령을 사용하여 docker의 Vistuoso 서버와 클라이언트 명령의 시스템 호출을 검사할 때TTL 파일은 docker의 Vistuoso 서버 측에서 참고하기 때문에 호스트에 설정된 TTL 파일은 찾을 수 없는 오류입니다.
docker에서 파일을 구성하여 TTL 파일을 읽습니다.
$ docker cp jawiki-20160407-article-categories.ttl main-virtuoso:/data/.
$ isql-vt -U dba -P dba
DB.DBA.TTLP_MT (file_to_string_output ('/data/jawiki-20160407-article-categories.ttl'), '', 'http://example.com/', 512);
*** Error 42000: [Virtuoso Driver][Virtuoso Server]FA003: Access to '/data/jawiki-20160407-article-categories.ttl' is denied due to access control in ini file
오류가 발생했습니다.읽을 수 있는 경로는virstuoso인 것 같습니다.int 파일에서 결정된 것 같습니다./usr/local/virtuoso-opensource/var/lib/virtuoso/db/virtuoso.ini
DirsAllowed = ., /usr/local/virtuoso-opensource/share/virtuoso/vad
TTL 파일을 허용된 디렉토리로 이동하여 다시 읽습니다.DB.DBA.TTLP_MT (file_to_string_output ('/usr/local/virtuoso-opensource/share/virtuoso/vad/jawiki-20160407-article-categories.ttl'), '', 'http://example.com/', 512);
Done. -- 74800 msec.
RDF 데이터 찾기
GUI에서 로그인한 데이터 검색
[Linked Data] – [SPARQL]에서 SPARQL 조회를 입력하고 "Execute"를 눌러 검색을 수행합니다.
select ?o where {
<http://ja.dbpedia.org/resource/高橋留美子> ?p ?o
}
브라우저를 통해 검색을 수행합니다.정상적으로 로드됩니다.
CUI에서 데이터 읽어들이기
호스트에 설치된 CUI 명령(isql-vt)을 사용하여 SPARQL 조회를 수행합니다.
$ isql-vt -U dba -P dba
SQL> sparql select ?o where { <http://ja.dbpedia.org/resource/高橋留美子> ?p ?o } ;
o
LONG VARCHAR
_______________________________________________________________________________
http://ja.dbpedia.org/resource/Category:1957年生
http://ja.dbpedia.org/resource/Category:存命人物
http://ja.dbpedia.org/resource/Category:新潟市出身の人物
http://ja.dbpedia.org/resource/Category:日本の漫画家
http://ja.dbpedia.org/resource/Category:日本女子大学出身の人物
http://ja.dbpedia.org/resource/Category:高橋留美子
6 Rows. -- 58 msec.
SQL>
WebAPI에서 읽어들이기
응용 프로그램에서 사용하기 위해서는 REST 또는 SOAP 스왑이 필요합니다.
Virtuoso SPARQL Query Service에서는 다음과 같이 기재되어 있기 때문에 POST로 테스트를 진행한다.
Method
Notes
GET
Short queries are sent in GET mode
POST
Queries longer than 1900 bytes are POST-ed
여기.에 SOAP의 샘플이 게재되었으니 테스트하십시오.
soap.xml
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<query-request xmlns="http://www.w3.org/2005/09/sparql-protocol-types/#">
<query xmlns="">
SELECT DISTINCT ?z WHERE { <http://ja.dbpedia.org/resource/高橋留美子> ?y ?z .} LIMIT 10
</query>
</query-request>
</soapenv:Body>
</soapenv:Envelope>
$ curl [email protected] -H "Content-Type:text/xml" -H "SOAPAction: ''" http://192.168.45.131:8890/sparql/
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<query-result xmlns="http://www.w3.org/2005/09/sparql-protocol-types/#">
<sparql xmlns="http://www.w3.org/2005/sparql-results#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/sw/DataAccess/rf1/result2.xsd">
<head>
<variable name="z"/>
</head>
<results distinct="false" ordered="true">
<result>
<binding name="z"><uri>http://ja.dbpedia.org/resource/Category:1957年生</uri></binding>
</result>
<result>
<binding name="z"><uri>http://ja.dbpedia.org/resource/Category:存命人物</uri></binding>
</result>
<result>
<binding name="z"><uri>http://ja.dbpedia.org/resource/Category:新潟市出身の人物</uri></binding>
</result>
<result>
<binding name="z"><uri>http://ja.dbpedia.org/resource/Category:日本の漫画家</uri></binding>
</result>
<result>
<binding name="z"><uri>http://ja.dbpedia.org/resource/Category:日本女子大学出身の人物</uri></binding>
</result>
<result>
<binding name="z"><uri>http://ja.dbpedia.org/resource/Category:高橋留美子</uri></binding>
</result>
</results>
</sparql></query-result></soapenv:Body></soapenv:Envelope>
SPARQL Guide for the Javascript Developer XML이 아니어도 될 것 같으니 해 봐.그러나 일본어 응답은 인코딩(톺uXXX)되었기 때문에 디코딩이 필요하다.
url.txt
query=SELECT+DISTINCT+%3Fo+WHERE+%7B+%3Chttp%3A%2F%2Fja.dbpedia.org%2Fresource%2F%E9%AB%98%E6%A9%8B%E7%95%99%E7%BE%8E%E5%AD%90%3E+%3Fp+%3Fo%7D&format=application%2Fjson
$ curl -s [email protected] -H "Content-Type: application/x-www-form-urlencoded" 'http://192.168.45.131:8890/sparql/' | perl -Xpne 's/\\u([0-9a-fA-F]{4})/chr(hex($1))/eg'
{ "head": { "link": [], "vars": ["o"] },
"results": { "distinct": false, "ordered": true, "bindings": [
{ "o": { "type": "uri", "value": "http://ja.dbpedia.org/resource/Category:1957年生" }},
{ "o": { "type": "uri", "value": "http://ja.dbpedia.org/resource/Category:存命人物" }},
{ "o": { "type": "uri", "value": "http://ja.dbpedia.org/resource/Category:新潟市出身の人物" }},
{ "o": { "type": "uri", "value": "http://ja.dbpedia.org/resource/Category:日本の漫画家" }},
{ "o": { "type": "uri", "value": "http://ja.dbpedia.org/resource/Category:日本女子大学出身の人物" }},
{ "o": { "type": "uri", "value": "http://ja.dbpedia.org/resource/Category:高橋留美子" }} ] } }
그리고 브라우저의javascript 응용 프로그램에서 검색할 수 있는지 확인하십시오.참고 자료
Reference
이 문제에 관하여(Virtoso(OSS 버전) docker 시작), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ir-shin1/items/86bc4bf0f9deda210b1a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)