Page History
Table of Contents | ||
---|---|---|
|
Vocabulary
Resource = a record of a
...
"thing"
...
in
...
eagle-i.
...
A
...
resource
...
is
...
an
...
instance
...
of
...
a
...
class
...
defined
...
in
...
the
...
eagle-i
...
ontology
...
(e.g.
...
"My
...
nifty
...
DNA
...
Microarray"
...
is
...
an
...
instance
...
of
...
the
...
class
...
"DNA
...
MicroArray",
...
which
...
is
...
a
...
subclass
...
of
...
"Instrument")
A note of formats
See the MIME Type Section in the eagle-i repo API guide for the different formats that are supported by the SPARQL endpoint (all our queries are SELECT, so probably the best is SPARQL Result Set, which is XML representing a table)
Configuration
Organization Identifier
The organization to which biostats tools are attached in the eagle-i repository is:
http://harvard.eagle-i.net/i/0000012e-5946-2efe-55da-381e80000000
The same URI can be used in the dev environment, by changing the hostname as in the config property below.
Config File
No Format |
---|
# General )\\ *Configuration* \# General \# What general type of resources we are dealing with\\ baseType=[http://purl.obolibrary.org/obo/ERO_0000071|http://purl.obolibrary.org/obo/ERO_0000071]\\ \# What organization are the resources "attached" to (all resources in eagle-i need to belong to an organization)\\ virtualOrganizationorganization=http://harvard.eagle-i.net/i/xyz\\0000012e-5946-2efe-55da-381e80000000 \# What properties to show in the overview record \# Literal properties (i.e. properties whose value is a simple string)\\ # Website lp1=[http://purl.obolibrary.org/obo/ERO_0000480|http://purl.obolibrary.org/obo/ERO_0000480] \# Object properties (i.e. properties whose value is a link to another resource or ontology term)\\ op1=[ # Not used for Biostats # op1= # op2= ################ # Filters ################ # Filter Group titles - for UI (do not grab these labels from ontology, they're usually not what you need) fg1="Software Purpose" fg2="Study Design" fg3="Algorithm" fg4="Data Type" fg5="Measurement Scale" # Properties for creating filters # Each property corresponds to a filter group # Direct filter properties #has software purpose fp1=http://purl.obolibrary.org/obo/ERO_0001719|_0000078 #has related Study Design fp2=http://eagle-i.org/ont/app/1.0/has_related_study_design #Algorithm used fp3=http://www.ebi.ac.uk/efo/swo/SWO_0000740 #Indirect filter properties (the property hangs off an embedded class) - need embedded property and indirect property #has data input fp4=http://purl.obolibrary.org/obo/ERO_0001719]0000076 #data type op2ip4=[http://purlwww.obolibraryw3.org/1999/obo/ERO_0000078|02/22-rdf-syntax-ns#type #has data input fp5=http://purl.obolibrary.org/obo/ERO_0000078]\\ \\ =======0000076 #has measurement scale ip5=http://eagle-i.org/ont/app/1.0/has_measurement_scale |
More advanced version with open-ended lists, potentially using yaml (but need to get the syntax right , for example:
No Format |
---|
== More advanced version with open-ended lists, potentially using yaml (but need to get the syntax right \;-) \# What properties to show in the overview record \# Literal properties (i.e. properties whose value is a simple string) literalProperties: propertyUri: [http://purl.obolibrary.org/obo/ERO_0000480| propertyUri: http://purl.obolibrary.org/obo/ERO_0000480]\\ \# Object properties (i.e. properties whose value is a link to another resource or ontology term) objectProperties: propertyUri: [ http://purl.obolibrary.org/obo/ERO_0001719| propertyUri: http://purl.obolibrary.org/obo/ERO_0001719] propertyUri: [http://purl.obolibrary.org/obo/ERO_0000078|http://purl.obolibrary.org/obo/ERO_0000078]\\ \# What properties to show on the left nav \# What properties to filter on \# => TBD with Richard\\ \\ *Queries* * * *Query for base, unfiltered dataset:* Find all instances of {{baseType}} affiliated with {{virtualOrganization}}, returns a table with a column per query variable defined in property configuration above\\ *Option 1 one query* PREFIX ei: <[http://purl.obolibrary.org/obo/|http0000078 |
Base queries
Get base, unfiltered dataset
Find all instances of baseType
affiliated with organization
, returns a table with a column per query variable defined in property configuration above
Need to split in two queries (one for Ontology labels, one for instances). Note that if desired props don't have preferred label we'll need to alter query 1
Query 1 => to be executed only once (labels don't change)
No Format |
---|
PREFIX eiapp: <http://eagle-i.org/ont/app/1.0/>
SELECT
?lp1Label
?op1Label
?op2Label
WHERE {
OPTIONAL {
<${lp1}> eiapp:preferredLabel ?lp1Label .
<${op1}> eiapp:preferredLabel ?op1Label .
<${op2}> eiapp:preferredLabel ?op2Label .
}
}
|
Query 2
Note that if a property is not defined in the config file (e.g. op1), the variable in the SELECT clause, as well as the entire triple pattern/pattern group in the WHERE clause (i.e. the corresponding line) needs to be omitted. So there need to be some conditional logic in the query generation.
No Format |
---|
PREFIX ei: <http://purl.obolibrary.org/obo/ERO_0000070]> PREFIX eiapp: <[http<http://eagle-i.org/ont/app/1.0/|http://eagle-i.org/ont/app/1.0/]> PREFIX rdfs: <[http<http://www.w3.org/2000/01/rdf-schema#|http://www.w3.org/2000/01/rdf-schema]>\\schema#> SELECT ?resourceUri ?resourceLabel ?resourceDescription ?lp1Label ?lp1Value ?op1Label ?op1ValueLabel ?op1ValueUri ?op2Label ?op2ValueLabel ?op2ValueUri\\ WHERE { ?resourceUri a <${baseType}> . ?resourceUri ei:ERO_0000070 <${virtualOrganizationorganization}> . ?resourceUri ?resourceUri rdfs:label ?resourceLabel . OPTIONAL { ?resourceUri eiapp:resource_description ?resourceDescription . ?resourceUri <${lp1}> ?lp1Value . <${lp1}> eiapp:preferredLabel ?lp1Label . ?resourceUri <${op1}> ?op1ValueUri . ?op1ValueUri rdfs:label ?op1ValueLabel . <${op1}> eiapp:preferredLabel ?op1Label . ?resourceUri <${op2}> ?op2ValueUri . ?op2ValueUri rdfs:label ?op2ValueLabel . <${op2}> eiapp:preferredLabel ?op2Label . } }\\ \\ *Option 2 split in two queries (one for Ontology labels, one for instances) = > this may be preferable* *Note that if desired props don't } } |
Example with substituted values
No Format |
---|
PREFIX ei: <http://purl.obolibrary.org/obo/> PREFIX eiapp: <httphave preferred label we'll need to alter query 1*\\ *Query 1 => to be executed only once (labels don't change)* * * PREFIX eiapp: <[http://eagle-i.org/ont/app/1.0/|http> PREFIX rdfs: <http://eagle-iwww.w3.org/ont2000/app/1.0/]>01/rdf-schema#> SELECT \\ ?resourceUri ?lp1LabelresourceLabel ?resourceDescription ?op1Labellp1Label ?op2Label\\lp1Value WHERE { OPTIONAL { <${lp1}> eiapp:preferredLabel ?lp1Label . <${op1}> eiapp:preferredLabel ?op1Label . <${op2}> eiapp:preferredLabel ?op2Label . } }\\ \\ *Query 2* * * PREFIX ei: <[http://purl.obolibrary.org/obo/|http://purl.obolibrary.org/obo/ERO_0000070]> PREFIX eiapp: <[http ?resourceUri a <http://purl.obolibrary.org/obo/ERO_0000071> . ?resourceUri ei:ERO_0000070 <http://harvard.dev.eagle-i.net/i/0000012e-5946-2efe-55da-381e80000000> . ?resourceUri rdfs:label ?resourceLabel . OPTIONAL { ?resourceUri eiapp:resource_description ?resourceDescription . ?resourceUri <http://purl.obolibrary.org/obo/ERO_0000480> ?lp1Value . } } |
Get detailed view of a resource
For the main resource, simply do a GET of its URI; the results can be in a variety of formats - see: eagle-i repo API guide
There is an additional parameter forceXML
, which returns a format that may be the most useful (it's the XML from which the HTML version is generated) - pure RDF/XML is horrible
Example:
No Format |
---|
GET http://harvard.qa.eagle-i.net/i/0000012e-5480-32e6-55da-381e80000000?forceXML
|
After getting the main resource, the embedded resources need to be processed. Assume main resource has uri http://harvard.eagle-i.net/123
This query will return embedded resources:
No Format |
---|
PREFIX eiapp: <http://eagle-i.org/ont/app/1.0/|http> SELECT ?embeddedResourceUri WHERE { <http://harvard.eagle-i.org/ont/app/1.0/]> PREFIX rdfs: <[http://www.w3.org/2000/01/rdf-schema#|httpnet/123> ?anyProperty ?embeddedResourceUri . ?embeddedResourceUri a ?type . ?type eiapp:inClassGroup eiapp:ClassGroup_EmbeddedResourceType . } |
To obtain the embedded resource's details, iterate over this list and do a GET as with the main resource.
Queries for filters
Get actual annotation values that have been used in the dataset
Do this for each direct filter property, e.g. fp1
No Format |
---|
PREFIX ei: <http://purl.obolibrary.org/obo/> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema]>\\schema#> SELECT ?resourceUrifilterValueUri ?resourceLabel ?resourceDescription ?lp1Value ?op1ValueLabel ?op1ValueUri ?op2ValueLabel ?op2ValueUri\\ ?filterValueLabel WHERE { ?resourceUri a <${baseType}> . ?resourceUri ei:ERO_0000070 <${virtualOrganizationorganization}> . ?resourceUri rdfs:label ?resourceLabel . OPTIONAL { ?resourceUri eiapp:resource_description ?resourceDescription . ?resourceUri <${lp1}> ?lp1Value . ?resourceUri <${op1}> ?op1ValueUri . ?op1ValueUri rdfs:label ?op1ValueLabel . ?resourceUri <${op2}> ?op2ValueUri . ?op2ValueUri rdfs:label ?op2ValueLabel .   ?resource <${fp1}> ?filterValueUri . ?filterValueUri rdfs:label ?filterValueLabel . } |
Do this for each indirect filter property, e.g. ep4 and ip4
No Format |
---|
PREFIX ei: <http://purl.obolibrary.org/obo/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT
?filterValueUri
?filterValueLabel
WHERE {
?resourceUri a <${baseType}> .
?resourceUri ei:ERO_0000070 <${organization}> .
?resource <${ep4}> ?embeddedResource .
?embeddedResource <${ip4}> ?filterValueUri .
?filterValueUri rdfs:label ?filterValueLabel .
}
|
Get the filtered dataset
First part is identical to unfiltered query (remember to remove unset config params, e.g. op1), then conditions are added as triple patterns;
Assume filterValueUrix is the filter value selected by the user, for each filter property, e.g. filterValueUri1 for fp1
NOTE if only one filter is selected, add only that triple pattern/triple pattern group.
No Format |
---|
PREFIX ei: <http;} }\\ \\ \\ \\ *Example with substituted values (option 1)* PREFIX ei: <[http://purl.obolibrary.org/obo/|http://purl.obolibrary.org/obo/ERO_0000070]> PREFIX eiapp: <[http://eagle-i.org/ont/app/1.0/|http<http://eagle-i.org/ont/app/1.0/]> PREFIX rdfs: <[http<http://www.w3.org/2000/01/rdf-schema#|http://www.w3.org/2000/01/rdf-schema]>\\schema#> SELECT ?resourceUri ?resourceLabel ?resourceDescription ?lp1Label ?lp1Value ?op1Label ?op1ValueLabel ?op1ValueUri ?op2Label ?op2ValueLabel ?op2ValueUri\\ WHERE { ?resourceUri a <[http://purl.obolibrary.org/obo/ERO_0000071|http://purl.obolibrary.org/obo/ERO_0000071]> . ?resourceUri <${baseType}> . ?resourceUri ei:ERO_0000070 <${organization}> . ?resourceUri rdfs:label ?resourceLabel . OPTIONAL { ?resourceUri eiapp:resource_description ?resourceDescription . ?resourceUri <[http://purl.obolibrary.org/obo/ERO_0000480|http://purl.obolibrary.org/obo/ERO_0000480]?resourceUri <${lp1}> ?lp1Value . <[http://purl.obolibrary.org/obo/ERO_0000480|http://purl.obolibrary.org/obo/ERO_0000480]> eiapp:preferredLabel ?lp1Label . ?resourceUri <[http://purl.obolibrary.org/obo/ERO_0001719|http://purl.obolibrary.org/obo/ERO_0001719]> ?op1ValueUri . ?op1ValueUri ?resourceUri <${op1}> ?op1ValueUri . ?op1ValueUri rdfs:label ?op1ValueLabel . ?resourceUri <${op2}> ?op2ValueUri . ?op2ValueUri rdfs:label ?op1ValueLabel . <[http://purl.obolibrary.org/obo/ERO_0001719|http://purl.obolibrary.org/obo/ERO_0001719]> eiapp:preferredLabel ?op1Label . ?resourceUri <[http://purl.obolibrary.org/obo/ERO_0000078|http://purl.obolibrary.org/obo/ERO_0000078]> ?op2ValueUri . ?op2ValueUri rdfs:label ?op2ValueLabel . <[http://purl.obolibrary.org/obo/ERO_0000078|http://purl.obolibrary.org/obo/ERO_0000078]> eiapp:preferredLabel ?op2Label . } }op2ValueLabel . } ?resourceUri <${fp1}> <${filterValueUri1}> . ?resourceUri <${fp2}> <${filterValueUri2}> . ?resourceUri <${fp3}> <${filterValueUri3}> . ?resourceUri <${ep4}> ?embeddedResource1 . ?embeddedResource1 <${ip4}> <${filterValueUri4}> . ?resourceUri <${ep5}> ?embeddedResource2 . ?embeddedResource2 <${ip5}> <${filterValueUri5}> . } |