*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")\\ *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)\\ virtualOrganization=http://harvard.eagle-i.net/i/xyz\\ \# What properties to show in the overview record \# Literal properties (i.e. properties whose value is a simple string)\\ 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=[http://purl.obolibrary.org/obo/ERO_0001719|http://purl.obolibrary.org/obo/ERO_0001719] op2=[http://purl.obolibrary.org/obo/ERO_0000078|http://purl.obolibrary.org/obo/ERO_0000078]\\ \\ ========= 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|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|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/|http://purl.obolibrary.org/obo/ERO_0000070]> PREFIX eiapp: <[http://eagle-i.org/ont/app/1.0/|http://eagle-i.org/ont/app/1.0/]> PREFIX rdfs: <[http://www.w3.org/2000/01/rdf-schema#|http://www.w3.org/2000/01/rdf-schema]>\\ SELECT ?resourceUri ?resourceLabel ?resourceDescription ?lp1Label ?lp1Value ?op1Label ?op1ValueLabel ?op1ValueUri ?op2Label ?op2ValueLabel ?op2ValueUri\\ WHERE { ?resourceUri a <${baseType}> . ?resourceUri ei:ERO_0000070 <${virtualOrganization}> . ?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 have 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://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* * * 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://eagle-i.org/ont/app/1.0/]> PREFIX rdfs: <[http://www.w3.org/2000/01/rdf-schema#|http://www.w3.org/2000/01/rdf-schema]>\\ SELECT ?resourceUri ?resourceLabel ?resourceDescription ?lp1Value ?op1ValueLabel ?op1ValueUri ?op2ValueLabel ?op2ValueUri\\ WHERE { ?resourceUri a <${baseType}> . ?resourceUri ei:ERO_0000070 <${virtualOrganization}> . ?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 . } }\\ \\ \\ \\ *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://eagle-i.org/ont/app/1.0/]> PREFIX rdfs: <[http://www.w3.org/2000/01/rdf-schema#|http://www.w3.org/2000/01/rdf-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 rdfs:label ?resourceLabel . OPTIONAL { ?resourceUri eiapp:resource_description ?resourceDescription . ?resourceUri <[http://purl.obolibrary.org/obo/ERO_0000480|http://purl.obolibrary.org/obo/ERO_0000480]> ?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 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 . } } |