279 Views
April 05, 24
スライド概要
[第6回大阪sas勉強会]小川良太
SAS言語を中心として,解析業務担当者・プログラマなのコミュニティを活性化したいです
Semantic Web Programming 31-JAN-2020 Ryota Ogawa 1
Semantic Web (セマンティック・ウェブ) セマンティックス (Semantics)とは、⾔語学において 「意味論」を指す⽤語であり、語や⽂の持つ意味内容 を扱う学問である セマンティック・ウェブ (Semantic Web)とは、W3Cの Tim Berners-Leeによって提唱された構想で、ウェブ上 のリソースに意味 (Semantics)を付与することで、コン ピュータによる情報の理解と⾃動処理を⽬指す技術で ある 2.1
RDF (Resource Description Framework) ウェブ上のリソースとその関係を表現するためのモデ ルであり、メタデータの記述⾔語として使⽤される 主語 (Subject)-述語 (Predicate)-⽬的語 (Object)の三 つ組 (トリプル)を基本単位とする トリプルは2つのノード (主語・⽬的語)と、有向アーク (述語)からなるラベル付き有向グラフとみなすことがで きる 2.2
URI (Uniform Resource Identifier)と IRI (Internationalized Resource Identifier) ウェブ上のリソースを⼀意に指し⽰す識別⼦ URIを拡張し、Unicodeを直接扱えるようにした識別⼦ をIRIという RDFにおいて、主語にはURI⼜は空⽩ノード、述語に はURI、⽬的語にはURI、空⽩ノード⼜はリテラルを使 ⽤する 2.3
RDF Serialization RDFトリプルをテキスト形式で記述するためのシリア ル化 (直列化)フォーマット 代表的なフォーマット RDF/XML N-Triples N3 (Notation 3) Turtle JSON-LD 2.4
RDFSとOWL RDFS (RDF Schema) RDFSは、リソースの関係を表現する述語 (プロパテ ィ、語彙)を定義するための仕組みを提供する OWL (Web Ontology Language) オントロジーとは「存在論」を指す哲学⽤語である が、情報科学分野では「概念化の明⽰的な仕様」と して定義される OWLは、より厳密なリソースの意味と関係を記述す るためのウェブオントロジー⾔語として利⽤される 2.5
共通語彙 コンピュータがメタデータを理解して情報を⾃動処理 するには、その意味が共通認識となっている語彙が必 要となる メタデータ記述のための代表的な共通語彙 SKOS (Simple Knowledge Organization System) DC (Dublin Core) FOAF (Friend of a Friend) Schema.org 2.6
SPARQL (スパークル) RDFに対して問い合わせを⾏うクエリ⾔語 例) DBpediaのSPARQLエンドポイント※で⽇本の⾸都 を検索する ※https://dbpedia.org/sparql 1 PREFIX dbr: <http://dbpedia.org/resource/> 2 PREFIX dbo: <http://dbpedia.org/ontology/> 3 SELECT * 4 WHERE { 5 dbr:Japan dbo:capital ?o 6 } 2.7
Triple Store (トリプルストア) RDFを格納するデータベースソフトのことで、 SPARQLクエリによるRDFの検索などが可能 SPARQLクエリを利⽤して問い合わせができるWeb API をSPARQLエンドポイントという 代表的なトリプルストア Apache Jena Fuseki OpenLink Virtuoso Stardog 2.8
ちょっとだけ 製薬っぽい話 3.1
CDISCにおけるRDFの利⽤ CDISC Standards in RDF CDISC Library (CDISC SHARE) NCI Controlled Terminology OWL/RDF PhUSE Going Translational With Linked Data (GoTWLD) 3.2
CDISCの共通語彙と名前空間 RDF Schemas Namespace Pre x Meta-Model Schema http://rdf.cdisc.org/mms# mms CT Schema http://rdf.cdisc.org/ct/schema# cts CDISC Schema http://rdf.cdisc.org/std/schema# cdiscs 3.3
CDISC Library Web API Overview Sam Hume et al. A Linked Data Model and Hypermedia API for CDISC SHARE 2.0. PhUSE US Connect 2019 3.4
閑話休題 4
今回やってみたこと 5
今回やってみたこと 1. FusekiにRDF/XMLフォーマットのSDTM CTを格納する 5
今回やってみたこと 1. FusekiにRDF/XMLフォーマットのSDTM CTを格納する 2. SPARQLクエリでSDTM CTを検索する 5
今回やってみたこと 1. FusekiにRDF/XMLフォーマットのSDTM CTを格納する 2. SPARQLクエリでSDTM CTを検索する 3. SASの勉強会なので、、、 SASでFusekiのエンドポイントにSPARQLを投げる ↑これ重要 5
今回やってみたこと 1. FusekiにRDF/XMLフォーマットのSDTM CTを格納する 2. SPARQLクエリでSDTM CTを検索する 3. SASの勉強会なので、、、 SASでFusekiのエンドポイントにSPARQLを投げる ↑これ重要 4. PROC HTTP !!! 5
今回やってみたこと 1. FusekiにRDF/XMLフォーマットのSDTM CTを格納する 2. SPARQLクエリでSDTM CTを検索する 3. SASの勉強会なので、、、 SASでFusekiのエンドポイントにSPARQLを投げる ↑これ重要 4. PROC HTTP !!! 本当はJavaとかRの⽅が簡単だと思う・・・ 5
Fusekiサーバの構築 RDF/XMLフォーマットのSDTM CTを準備します 6.1
Fusekiサーバの構築 FusekiにSDTM CTをロードすると、、、できた!! 6.2
SPARQLエンドポイント ブラウザからSPARQLを投げると、、、できた!! 6.3
VSTEST/VSTESTCDの⼀覧を作成したい 6.4
SPARQLクエリの作成
"sparql.rq"として保存する
1 BASE <http://rdf.cdisc.org/sdtm-terminology#>
2 PREFIX cts: <http://rdf.cdisc.org/ct/schema#>
3 PREFIX mms: <http://rdf.cdisc.org/mms#>
4 SELECT ?clcode1 ?code1 ?val1 ?clcode2 ?code2 ?val2
5 WHERE {
6
?s1 cts:cdiscSubmissionValue "VSTEST".
7
?s1 cts:nciCode ?clcode1.
8
?s2 mms:inValueDomain ?s1.
9
?s2 cts:nciCode ?code1.
10
?s2 cts:cdiscSubmissionValue ?val1.
11
?s3 cts:nciCode ?code1.
12
?s3 mms:inValueDomain ?o1.
13
?o1 cts:nciCode ?clcode2.
14
?o1 cts:cdiscSubmissionValue ?cname.
15
?s3 cts:nciCode ?code2.
16
?s3 cts:cdiscSubmissionValue ?val2.
17
FILTER (?cname = "VSTESTCD")
18 }
6.5
PROC HTTPの準備 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 filename filename filename filename filename sparql "/folders/myfolders/sparql.rq"; input temp; headin temp; output "/folders/myfolders/results.json"; headout "/folders/myfolders/header.txt"; data _null_; file input; infile sparql length = len end = eof; length textline $200; input textline $varying. len; length query $20000; retain query; query = catx(urlencode("0A0D"x), query, urlencode(strip(textline))); if eof then do; query = cats("query=", transtrn(query, "%2B", "+")); put query; end; run; data _null_; file headin; put "Accept: application/sparql-results+json"; run; proc http url method in out headerin headerout ; run; = = = = = = "http://192.168.12.6:3030/cdisc-sdtm-ct/" "POST" input output headin headout; 6.6
PROC HTTPの実⾏ 6.7
JSONをSASデータセットに整形 1 libname result json "/folders/myfolders/results.json"; 2 3 data _null_; 4 set result.head_vars; 5 attrib VNAM length = $32; 6 array arrVars vars:; 7 do over arrVars; 8 VNAM = vvalue(arrVars); 9 if _i_ = 1 then do; 10 call execute("data queryResults;"); 11 call execute("set result.bindings_"||strip(VNAM)||"(rename = (value = "||strip(VNAM) 12 call execute("keep ordinal_bindings "||strip(VNAM)||";"); 13 end; 14 15 if _i_ > 1 then do; 16 call execute('if _n_ = 1 then do;'); 17 call execute('if 0 then set result.bindings_'||strip(VNAM)||' 18 (rename = (value = '||strip(VNAM)||'));'); 19 call execute('declare hash h'||strip(vvalue(_i_))||'(dataset: "result.bindings_'||st 20 (rename = (value = '||strip(VNAM)||'))");'); 21 call execute('h'||strip(vvalue(_i_))||'.defineKey("ordinal_bindings");'); 22 call execute('h'||strip(vvalue(_i_))||'.defineData("'||strip(VNAM)||'");'); 23 call execute('h'||strip(vvalue(_i_))||'.defineDone();'); 24 call execute('end;'); 25 call execute('if h'||strip(vvalue(_i_))||'.find() ne 0 then call missing('||strip(VN 26 call execute('keep '||strip(VNAM)||';'); 27 end; 28 29 if _i_ = dim(arrVars) then do; 30 call execute("run;"); 31 end; 32 end; 33 run; 6.8
JSONをSASデータセットに整形 VSTEST/VSTESTCDの⼀覧ができた!! 6.9
ご清聴ありがとうございま した 7