BH12.12/SPARQLthon2/MDBuse

提供:TogoWiki

移動: 案内, 検索

目次

使用データ

  • IDリンク関連
    • graph <http://localhost:8890/DAV/sample>
      • 20121031-miriam.ttl //seeAlsoのリンク先DBリスト
      • gold2ontology2.ttl.txt //goldのprefixにwwwを追記
      • meo_sample.ttl.Changed
      • prokaryotes.txt.bioproject_refseq.nt
      • summary.txt.bioproject_taxid_gold.nt
  • オントロジー用ルールセットの追加
rdfs_rule_set ('http://localhost:8890/DAV/sample_owl', 'http://localhost:8890/DAV/20121031owl');
rdfs_rule_set ('http://localhost:8890/DAV/sample_owl', 'http://localhost:8890/DAV/ncbi_taxonomy_owl');
前)http://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?mode=Info&id= 
後)http://www.ncbi.nlm.nih.gov/taxonomy/
  • フリーテキストインデックス(トリプル件数が多いものだけにインデックス追加)
DB.DBA.RDF_OBJ_FT_RULE_ADD('http://localhost:8890/DAV/refseqv2', null, 'All');
DB.DBA.RDF_OBJ_FT_RULE_ADD('http://localhost:8890/DAV/ncbi_taxonomy_owl', null, 'All');


IDの繋ぎ込み

DBタイプ情報の追加

各データのIDを指すpredicateがrdfs:seeAlsoになっているため、何のDBへのリンクなのか区別がつかない。 chromosome単位のseeAlsoのリストを取得。

PREFIX	obo:<http://purl.obolibrary.org/obo/>
SELECT ?organism ?link
FROM <http://localhost:8890/DAV/refseqv2>
WHERE
{
 ?organism a obo:SO_0000340 ; 
   rdfs:seeAlso ?link
}

linkのテキストからDBタイプを決定。20121031-miriam.ttlに無いDB名は適当に付与。

@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix ds: <http://identifiers.org/dataset/> .
<http://www.ncbi.nlm.nih.gov/nuccore/386836097> rdf:type ds:Nuccore2 . 
<http://www.ncbi.nlm.nih.gov/bioproject/89409> rdf:type ds:Bioproject . 
<http://www.ncbi.nlm.nih.gov/nuccore/NC_017765.1> rdf:type ds:Nuccore1 . 
<http://www.ncbi.nlm.nih.gov/taxonomy/1133850> rdf:type ds:Taxonomy . 
<http://www.ncbi.nlm.nih.gov/pubmed/16436211> rdf:type ds:Pubmed . 

Taxonomyのタイプ追加

NCBIのTaxonomyのowlファイルと繋げるために、refseq2rdf内のTaxonomyリンクデータのtypeを追加

<http://www.ncbi.nlm.nih.gov/taxonomy/1133850> rdf:type <http://purl.org/obo/owl/NCBITaxon#NCBITaxon_1133850> . 
<http://www.ncbi.nlm.nih.gov/taxonomy/272561> rdf:type <http://purl.org/obo/owl/NCBITaxon#NCBITaxon_272561> . 
  • オントロジーの確認

あるTaxonomyのルートまでの階層を表示

DEFINE input:inference <http://localhost:8890/DAV/ncbi_taxonomy_owl>
SELECT ?type ?label ?rank
FROM <http://localhost:8890/DAV/refseqv2>
FROM <http://localhost:8890/DAV/taxonomy_id>
FROM <http://localhost:8890/DAV/ncbi_taxonomy_owl>
WHERE
{
  <http://www.ncbi.nlm.nih.gov/taxonomy/666681> a ?type.
  ?type rdfs:label ?label.
  OPTIONAL {?type <has_rank> ?rank.}
}

結果

type	label	rank
http://purl.org/obo/owl/NCBITaxon#NCBITaxon_666681	"Methylotenera versatilis 301"@en	
http://purl.org/obo/owl/NCBITaxon#NCBITaxon_1055487	"Methylotenera versatilis"@en	http://purl.org/obo/owl/NCBITaxon#species
http://purl.org/obo/owl/NCBITaxon#NCBITaxon_359407	"Methylotenera"@en	http://purl.org/obo/owl/NCBITaxon#genus
http://purl.org/obo/owl/NCBITaxon#NCBITaxon_32011	"Methylophilaceae"@en	http://purl.org/obo/owl/NCBITaxon#family
http://purl.org/obo/owl/NCBITaxon#NCBITaxon_206350	"Methylophilales"@en	http://purl.org/obo/owl/NCBITaxon#order
http://purl.org/obo/owl/NCBITaxon#NCBITaxon_28216	"Betaproteobacteria"@en	http://purl.org/obo/owl/NCBITaxon#class
http://purl.org/obo/owl/NCBITaxon#NCBITaxon_1224	"Proteobacteria"@en	http://purl.org/obo/owl/NCBITaxon#phylum
http://purl.org/obo/owl/NCBITaxon#NCBITaxon_2	"Bacteria"@en	http://purl.org/obo/owl/NCBITaxon#superkingdom
http://purl.org/obo/owl/NCBITaxon#NCBITaxon_131567	"cellular organisms"@en	
http://purl.org/obo/owl/NCBITaxon#NCBITaxon_1	"root"@en

SPARQL例

使いそうなSPARQL文を色々と試した。

Taxonomy関連

  • refseqにフリーテキスト検索をかけて、TaxonomyIDを取得
PREFIX obo:<http://purl.obolibrary.org/obo/>
PREFIX ds:<http://identifiers.org/dataset/>
PREFIX genome:<http://genome.db/sw/>

SELECT ?organism ?taxonomy
FROM <http://localhost:8890/DAV/refseqv2>
FROM <http://localhost:8890/DAV/sample_bridge>
WHERE
{
 {
   SELECT distinct(?organism)
   WHERE
   {
     ?organism rdf:type obo:SO_0000340;
       ?p ?text
       FILTER ((str(?p) = str(rdfs:label)) || (str(?p) = str(rdfs:comment)) || (str(?p) = str(genome:version)) || (str(?p) = str(genome:organism))). 
     ?text bif:contains '"MG1655"'.
   }
 } 
 ?organism rdfs:seeAlso ?taxonomy.
 ?taxonomy a ds:Taxonomy
}

Gene関連

  • refseqに遺伝子名でのフリーテキスト検索をかけて、ヒットするタイプ毎の件数を取得
SELECT ?type count(?type) as ?rownum
FROM<http://localhost:8890/DAV/refseqv2>
WHERE
{
 ?s ?p ?text.
 ?text bif:contains '"rpoB"'.
 ?s rdf:type ?type
} GROUP BY ?type

結果

http://purl.obolibrary.org/obo/SO_0000704 1323件 gene
http://purl.obolibrary.org/obo/SO_0000141    1件 terminator
http://purl.obolibrary.org/obo/SO_0000139    9件 ribosome_entry_site
http://purl.obolibrary.org/obo/SO_0000316 1370件 CDS
http://purl.obolibrary.org/obo/SO_0000141    1件 terminator
http://purl.obolibrary.org/obo/SO_0000001  200件 region
  • ある遺伝子が含まれるgenomeのsuperkingdom毎の件数を取得
DEFINE input:inference <http://localhost:8890/DAV/ncbi_taxonomy_owl>
PREFIX obo:<http://purl.obolibrary.org/obo/>
PREFIX dcterms:<http://purl.org/dc/terms/>
PREFIX ds:<http://identifiers.org/dataset/>
PREFIX taxon:<http://purl.org/obo/owl/NCBITaxon>

SELECT ?taxlabel count(*) as ?count
FROM <http://localhost:8890/DAV/refseqv2>
FROM <http://localhost:8890/DAV/sample_bridge>
FROM <http://localhost:8890/DAV/taxonomy_id>
FROM<http://localhost:8890/DAV/ncbi_taxonomy_owl>
WHERE
{
 ?gene rdf:type obo:SO_0000704;
  dcterms:isPartOf ?genomeid;
  ?p ?text.
 ?text bif:contains '"rpoB"'.
 ?genomeid rdfs:label ?label;
   rdfs:seeAlso ?taxonid.
 ?taxonid a ds:Taxonomy;
  a ?type.
 ?type rdfs:label ?taxlabel;
  <has_rank> <http://purl.org/obo/owl/NCBITaxon#superkingdom>.
}GROUP BY ?taxlabel

結果

taxlabel	count
"Bacteria"@en	1238
"Archaea"@en	14


SPARQL

  • ルールセットを設定せずに、再帰検索する方法(virtuoso)

※subclassは階層的に検索されるが、本人(MEO_0000036)は出力されない

PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#>
PREFIX meo:<http://purl.jp/bio/11/meo/> 

SELECT DISTINCT ?x
FROM <http://localhost:8890/DAV/sample_owl>
WHERE
{
 { 
   SELECT ?x ?y WHERE { ?x rdfs:subClassOf ?y option(transitive)
                        FILTER ( ?y = meo:MEO_0000036 ) } 
 }
}

Environment関連

  • refseqにフリーテキスト検索をかけて、環境情報を取得
PPREFIX obo:<http://purl.obolibrary.org/obo/>
REFIX ds:<http://identifiers.org/dataset/>
PREFIX genome:<http://genome.db/sw/>
PREFIX meo:<http://purl.jp/bio/11/meo/>

SELECT ?env
FROM <http://localhost:8890/DAV/refseqv2>
FROM <http://localhost:8890/DAV/sample>
FROM <http://localhost:8890/DAV/sample_bridge>
WHERE
{
  {
    SELECT distinct(?bioproject) as ?projectid
    WHERE 
    { 
      ?organism rdf:type obo:SO_0000340;
        rdfs:seeAlso ?bioproject;
        ?p ?text
        FILTER ((str(?p) = str(rdfs:label)) || (str(?p) = str(rdfs:comment)) || (str(?p) = str(genome:version)) || (str(?p) = str(genome:organism))). 
      ?text bif:contains '"MG1655"'. 
      ?bioproject a ds:Bioproject.
   }
 }
 ?projectid rdfs:seeAlso ?orgbioprjctid.
 ?orgbioprjctid rdfs:label "Genome sequencing";
   rdfs:seeAlso ?gold.
 ?gold meo:environmentalDescribed ?env.
}

結果

envo
http://purl.org/obo/owl/NCBITaxon#NCBITaxon_9606
http://sig.uw.edu/fma#/Intestine
  • "soil"(MEO_0000007)のSRSリストをオントロジーで取得
DEFINE input:inference <http://localhost:8890/DAV/sample_owl>
PREFIX srs: <http://trace.ncbi.nlm.nih.gov/Traces/sra/sra.cgi?sample=>
PREFIX meo: <http://purl.jp/bio/11/meo/>
PREFIX dc: <http://purl.org/dc/elements/1.1/>

SELECT ?srs
FROM <http://localhost:8890/DAV/sample>
WHERE
{
 ?srs ?p ?blank .
 FILTER ((str(?p) = str(meo:biome)) || (str(?p) = str(meo:environmentalFeature)) || (str(?p) = str(meo:environmentalMaterial)) ). 
 ?blank a meo:MEO_0000007 .
}
  • "hydrosphere"(MEO_0000004)のGOLDリストをオントロジーで取得
DEFINE input:inference <http://localhost:8890/DAV/sample_owl>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX meo: <http://purl.jp/bio/11/meo/>

SELECT distinct(?gold) as ?goldid
FROM <http://localhost:8890/DAV/sample>
WHERE
{
 ?gold a meo:MEO_0000004;
 meo:environmentalDescribed ?meo
}
  • "hydrosphere"(MEO_0000004)のTaxonomyID一覧を取得
DEFINE input:inference <http://localhost:8890/DAV/sample_owl>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX meo: <http://purl.jp/bio/11/meo/>
PREFIX ds: <http://identifiers.org/dataset/>

SELECT ?taxsonomy
FROM <http://localhost:8890/DAV/sample>
FROM <http://localhost:8890/DAV/sample_bridge>
WHERE
{
 {
  SELECT distinct(?goldid) as ?gold
  WHERE
  {
   ?goldid a meo:MEO_0000004;
     meo:environmentalDescribed ?meo.
  }
 }
 ?oriProjectId rdfs:seeAlso ?gold.
 ?refseqProjectId rdfs:seeAlso ?oriProjectId;
   rdfs:seeAlso ?taxsonomy;
   rdfs:label ?dataType
   FILTER regex(?dataType, "RefSeq Genome", "i" ).
 ?taxsonomy rdf:type ds:Taxonomy.
}
  • ある環境中(MEO_00000033=marine habitat)に含まれるsuperkingdom毎の件数を取得
DEFINE sql:select-option "order"
DEFINE input:inference <http://localhost:8890/DAV/sample_owl>
PREFIX meo: <http://purl.jp/bio/11/meo/>
PREFIX ds: <http://identifiers.org/dataset/>

SELECT ?taxlabel count(?type) as ?count
FROM <http://localhost:8890/DAV/sample>
FROM <http://localhost:8890/DAV/sample_bridge>
FROM <http://localhost:8890/DAV/refseqv2>
FROM <http://localhost:8890/DAV/taxonomy_id>
FROM <http://localhost:8890/DAV/ncbi_taxonomy_owl>
WHERE
{
 {
   SELECT distinct(?goldid) as ?gold
   FROM <http://localhost:8890/DAV/id> 
   WHERE
   {
     ?goldid a meo:MEO_0000033 .
   }
 }
 ?oriProjectId rdfs:seeAlso ?gold.
 ?refseqProjectId rdfs:seeAlso ?oriProjectId;
   rdfs:seeAlso ?taxsonomy;
   rdfs:label ?dataType
   FILTER regex(?dataType, "RefSeq Genome", "i" ).
 ?taxsonomy rdf:type ds:Taxonomy;
  a ?type.
 ?type rdfs:label ?taxlabel;
   <has_rank> <http://purl.org/obo/owl/NCBITaxon#superkingdom>.
} GROUP BY ?taxlabel ORDER BY DESC 2

結果

taxlabel	count
"Bacteria"@en	76
"Archaea"@en	11

各rankを問い合わせてGoogleChartで可視化した結果

生物種の割合を示すチャート