Wiki

Clone wiki

typon / Data annotation and querying

We describe here a short experiment with D2RQ, virtuoso, and BIGSdb.

We started by writing a D2RQ mapping for the data for Neisseria spp, one of the databases available in our local BIGSdb installation. We note that our mapping is not exhaustive and that we just annotated part of the data with TypOn ontology. One can explore the data at http://rest.phyloviz.net/neisseria/.

Even though D2RQ web app provides a SPARQL endpoint, it turns out that queries may take long time to complete, causing high loads in the underlying database, and the Web app may also become irresponsive. To overcome this issue we used the tool dump-rdf available with D2RQ to dump all triples:

./dump-rdf -b "http://rest.phyloviz.net/neisseria/resource/" -o neisseria.ttl mapping.ttl
Then we upload all data to a local instance of virtuoso through isql:
select * from DB.DBA.load_list;
delete from DB.DBA.load_list;
ld_dir('/home/data/tmp/2upload', 'mapping.ttl', 'http://rest.phyloviz.net/neisseria/');
rdf_loader_run();
select * from DB.DBA.load_list;
A more responsive SPARQL endpoint is available at http://data.phyloviz.net/sparql. Note that we should select http://rest.phyloviz.net/neisseria/ as the default graph.

Query examples:

PREFIX typon: <http://purl.phyloviz.net/ontology/typon#>
PREFIX uniprot: <http://purl.uniprot.org/core/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>

SELECT DISTINCT ?isolate ?schema ?locus ?allele_id
WHERE {

    SERVICE <http://beta.sparql.uniprot.org/sparql> {
        ?taxon uniprot:scientificName "Neisseria polysaccharea" .
    }

    ?isolate typon:isFromTaxon  ?taxon ;
        typon:isolatedAt <http://dbpedia.org/resource/Canada> ;
        typon:hasAllele ?allele .

    ?schema typon:hasSchemaPart ?spart .

    ?spart typon:hasLocus ?locus_res ;
        typon:index "3"^^xsd:int .

    ?locus_res rdfs:label ?locus .

    ?allele typon:isOfLocus ?locus_res ;
        typon:id ?allele_id .
}
SELECT ?res WHERE {
    ?res <http://purl.uniprot.org/core/scientificName> "Neisseria meningitidis" .
}
PREFIX typon: <http://purl.phyloviz.net/ontology/typon#>

SELECT (str(?isolate_id) as ?isolate) ?carB ?glnA ?rpiA
FROM <http://rest.phyloviz.net/neisseria/>
WHERE {
  ?isolate_res typon:isFromTaxon  <http://purl.uniprot.org/taxonomy/487>;
           typon:hasAllele ?carB_res ;
           typon:hasAllele ?glnA_res ;
           typon:hasAllele ?rpiA_res ;
           typon:isolateId ?isolate_id .

  ?carB_res typon:isOfLocus <http://rest.phyloviz.net/neisseria/resource/loci/carB> ;
            typon:id ?carB .
  ?glnA_res typon:isOfLocus <http://rest.phyloviz.net/neisseria/resource/loci/glnA> ;
            typon:id ?glnA .
  ?rpiA_res typon:isOfLocus <http://rest.phyloviz.net/neisseria/resource/loci/rpiA> ;
            typon:id ?rpiA .
} ORDER BY ?carB ?glnA ?rpiA
PREFIX typon: <http://purl.phyloviz.net/ontology/typon#>
PREFIX uniprot: <http://purl.uniprot.org/core/>

select distinct ?taxon where {
    [] typon:isFromTaxon ?taxon .
}
PREFIX typon: <http://purl.phyloviz.net/ontology/typon#>
PREFIX uniprot: <http://purl.uniprot.org/core/>

SELECT (str(?isolate_id) as ?isolate) ?species ?carB ?glnA ?rpiA
FROM <http://rest.phyloviz.net/neisseria/>
WHERE {

  ?isolate_res typon:isFromTaxon ?taxon ;
           typon:hasAllele ?carB_res ;
           typon:hasAllele ?glnA_res ;
           typon:hasAllele ?rpiA_res ;
           typon:isolateId ?isolate_id .

  GRAPH ?taxon {
           ?taxon uniprot:scientificName ?species ;
                  uniprot:rank uniprot:Species .
  }

  ?carB_res typon:isOfLocus <http://rest.phyloviz.net/neisseria/resource/loci/carB> ;
            typon:id ?carB .
  ?glnA_res typon:isOfLocus <http://rest.phyloviz.net/neisseria/resource/loci/glnA> ;
            typon:id ?glnA .
  ?rpiA_res typon:isOfLocus <http://rest.phyloviz.net/neisseria/resource/loci/rpiA> ;
            typon:id ?rpiA .

} ORDER BY ?species ?carB ?glnA ?rpiA

Updated