- 遅いので sparql クエリ分割
- 必要な offset limit 分だけ別クエリで取得
- javascript セクションで必要な sparql json 形式を返す
- line count のときは unless でスキップ
datasets(Opt.)- example: DS1631_1,DS1631_2,DS1631_3
species(Opt.)- example: TAX_9606
species_s(Opt.)- example: vertebrates,plants
sample_type(Opt.)- example: C16403
cell_line(Opt.)organ(Opt.)disease(Opt.)disease_s(Opt.)- example: cancer
modification(Opt.)- example: UNIMOD_21
instrument_mode(Opt.)- example: JPO_006
instrument(Opt.)project_keywords(Opt.)- example: iPS
dataset_keywords(Opt.)- example: CH2O,by trypsin
protein_keywords(not work)excluded_datasets(Opt.)- example: DS1631_1,DS1631_2
excluded_proteins(not work)order(Opt.)- default: dataset_id
desc(Opt.)- example: 1
limit(Opt.)- exmaple: 10
offset(Opt.)- example: 0
line_count- example 1
async ({datasets, species, species_s, sample_type, cell_line, organ, disease, disease_s, modification,
instrument_mode, instrument, project_keywords, dataset_keywords, protein_keywords, excluded_datasets, excluded_proteins,
order, desc, limit, offset, line_count}) => {
var sparqlet = (api, body) => {
const options = {
method: 'POST',
body: body,
headers: {
'Accept': 'application/json',
'Content-Type': 'application/x-www-form-urlencoded'
}
};
var res = fetch(api, options).then(res=>res.json());
return res;
}
var params = [];
params.push("mode=dataset");
if(datasets) params.push("datasets=" + datasets);
if(species) params.push("species=" + species);
if(species_s) params.push("species_s=" + species_s);
if(sample_type) params.push("sample_type=" + sample_type);
if(cell_line) params.push("cell_line=" + cell_line );
if(organ) params.push("organ=" + organ );
if(disease) params.push("disease=" + disease );
if(disease_s) params.push("disease_s=" + disease_s );
if(modification) params.push("modification=" + modification );
if(instrument) params.push("instrument=" + instrument );
if(instrument_mode) params.push("instrument_mode=" + instrument_mode );
if(project_keywords) params.push("dataset_keywords=" + project_keywords );
if(dataset_keywords) params.push("dataset_keywords=" + dataset_keywords );
if(protein_keywords) params.push("protein_keywords=" + protein_keywords );
if(excluded_datasets) params.push("excluded_datasets=" + excluded_datasets );
if(excluded_proteins) params.push("excluded_proteins=" + excluded_proteins );
if(order) params.push("order=" + order );
if(desc) params.push("desc=" + desc );
if(limit) params.push("limit=" + limit );
if(offset) params.push("offset=" + offset );
var res = await sparqlet("dbi_make_filter_code", params.join("&"));
res.select_line = "DISTINCT ?dataset_id ?project_id ?project_title ?project_date ?species_label ?protein_count ?spectrum_count";
if(line_count){
res.select_line = "(COUNT(DISTINCT ?dataset_id) AS ?line_count)";
res.code_limit = "";
}
return res;
};{{SPARQLIST_EP}}
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX dct: <http://purl.org/dc/terms/>
PREFIX jpo: <http://rdf.jpostdb.org/ontology/jpost.owl#>
PREFIX obo: <http://purl.obolibrary.org/obo/>
PREFIX ncit: <http://ncicb.nci.nih.gov/xml/owl/EVS/Thesaurus.owl#>
PREFIX unimod: <http://www.unimod.org/obo/unimod.obo#>
PREFIX uniprot: <http://purl.uniprot.org/core/>
PREFIX tax: <http://purl.bioontology.org/ontology/NCBITAXON/>
PREFIX owl: <http://www.geneontology.org/formats/oboInOwl#>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX sio: <http://semanticscience.org/resource/>
PREFIX : <http://rdf.jpostdb.org/entry/>
SELECT {{filter.select_line}}
WHERE {
{{filter.code_value}}
?dataset a jpo:Dataset ;
dct:identifier ?dataset_id ;
^jpo:hasDataset ?project ;
sio:SIO_000216 [ a jpo:NumOfLeadingProteins ;
sio:SIO_000300 ?protein_count ] ;
sio:SIO_000216 [ a jpo:NumOfSpectra ;
sio:SIO_000300 ?spectrum_count ] ;
jpo:hasProfile/jpo:hasSample/jpo:species/rdfs:seeAlso/skos:prefLabel ?species_label .
FILTER (LANG(?species_label) = 'en')
{{filter.code_dataset}}
}
{{filter.code_limit}}({line_count, dataset, filter}) => {
if (line_count) return 0;
return {
values: dataset.results.bindings.map(d => ":" + d.dataset_id.value).join(" "),
}
}PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX dct: <http://purl.org/dc/terms/>
PREFIX jpo: <http://rdf.jpostdb.org/ontology/jpost.owl#>
PREFIX obo: <http://purl.obolibrary.org/obo/>
PREFIX ncit: <http://ncicb.nci.nih.gov/xml/owl/EVS/Thesaurus.owl#>
PREFIX unimod: <http://www.unimod.org/obo/unimod.obo#>
PREFIX uniprot: <http://purl.uniprot.org/core/>
PREFIX tax: <http://purl.bioontology.org/ontology/NCBITAXON/>
PREFIX owl: <http://www.geneontology.org/formats/oboInOwl#>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX sio: <http://semanticscience.org/resource/>
PREFIX : <http://rdf.jpostdb.org/entry/>
SELECT {{filter.select_line}}
WHERE {
{{#unless line_count}}
VALUES ?dataset { {{query_code.values}} }
?dataset a jpo:Dataset ;
dct:identifier ?dataset_id .
?project jpo:hasDataset ?dataset ;
dct:identifier ?project_id ;
dct:title ?project_title ;
dct:date ?project_date .
{{/unless}}
}({line_count, dataset, info}) => {
if (line_count) return dataset;
let ds2pro = {};
info.results.bindings.forEach(d => {
ds2pro[d.dataset_id.value] = {
project_id : d.project_id ,
project_title : d.project_title,
project_date : d.project_date
}
});
dataset.head.vars.push("project_id", "project_title", "project_date");
for (let i = 0; i < dataset.results.bindings.length; i++) {
const ds_id = dataset.results.bindings[i].dataset_id.value;
if (ds2pro[ds_id]) {
dataset.results.bindings[i].project_id = ds2pro[ds_id].project_id;
dataset.results.bindings[i].project_title = ds2pro[ds_id].project_title;
dataset.results.bindings[i].project_date = ds2pro[ds_id].project_date;
}
}
return dataset;
}