Virtoso(OSS 버전) docker 시작

13912 단어 Dockervirstuoso

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에 투입해 보세요.
읽을 텍스트 형식에 따라 서버를 지정해야 합니다.

  • 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 { &lt;http://ja.dbpedia.org/resource/高橋留美子&gt; ?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 응용 프로그램에서 검색할 수 있는지 확인하십시오.

    참고 자료

  • RDF 데이터를 Virtoso에 로드하고 SPARQL을 통해 AddStar 검색
  • Virtuoso에 데이터를 로드하는 방법(영어)
  • Virtoso 시도
  • How to Install Virtuoso Open Source (VOS) on CentOS Linux
  • Virtoso 시도
  • SPARQLthon19/TripleLoad
  • Virtuoso SPARQL Query Service
  • Virtoso의 Cross-Origin Resource Sharing(CORS) 라이센스
  • Cross-Origin Resource Sharing (CORS) enabling a Virtuoso SPARQL Endpoint
  • 좋은 웹페이지 즐겨찾기