TOWARDS KNOWLEDGE FEDERATION BIOMEDICAL APPLICATIONS Pedro Lopes & José Luís Oliveira http://bioinformatics.ua.pt i-SEMANTICS 2011, September 7-9, Graz, Austria #is11tkf #iKNOW2011 #iSEMANTICS2011
IN
TOWARDS KNOWLEDGE FEDERATION BIOMEDICAL APPLICATIONS Pedro Lopes & José Luís Oliveira http://bioinformatics.ua.pt i-SEMANTICS 2011, September 7-9, Graz, Austria #is11tkf #iKNOW2011 #iSEMANTICS2011
SEMANTIC WEB APPLICATION FRAMEWORK
IN
PEDRO LOPES Innovative Biomedical Technologies Bioinformatics R&D at IEETA PhD Student at University of Aveiro
@pedrolopes http://pedrolopes.net pedrolopes@ua.pt
¢
What?
¢
Why?
¢
How?
¢
Setting it up...
¢
Where?
¢
Future
What? ¢ ¢
¢
¢
¢
http://bioinformatics.ua.pt/coeus
¢
Next Generation Semantic Web Application Framework Take advantage of Semantic Web technologies/standards Easy to configure/setup Integrate heterogeneous/distributed resources Provide data-access APIs Open federation layer connecting miscellaneous instances Streamline Semantic Web application development
Next Generation Semantic Web Application Framework Take advantage of Semantic Web technologies/standards Easy to configure/setup Integrate heterogeneous/distributed resources Provide data-access APIs Open federation layer connecting miscellaneous instances Streamline Semantic Web application development
“Semantic Web-in-a-box� NO STANDALONE APPS, ENTIRE ECOSYSTEMS
¢
Why? ¢
¢
¢
¢
http://bioinformatics.ua.pt/coeus
¢
(Among others…)
IMPROVE BIOMEDICAL APPLICATIONS DOMAIN
SEMANTIC WEB + LIFE SCIENCES perfect benchmark awareness from bioinformatics developers common intertwined graph relationship structure
BUT...
SEMANTIC WEB + LIFE SCIENCES perfect benchmark awareness from bioinformatics developers common intertwined graph relationship structure
BUT... Semantic Web is underused in the life sciences domain transition/migration is very difficult complex application deployment learn a whole new batch of technologies (again!) no killer apps/frameworks
and
are notable exceptions
¢
¢
How? ¢
¢
¢
http://bioinformatics.ua.pt/coeus
¢
Do you like gardening?
KNOWLEDGE
SEED
CSV
XML
SQL
SPARQL
is a single app, an instance SEED ENGINE
API REST
Biomedical Application
SPARQL
12:00 Carrier PM Pagehttp:// Title www.domain. com
KNOWLEDGE
SEED is a single app, an instance
KNOWLEDGE
GARDEN links multiple seeds SEED SEED SPARQL
SPARQL
SEED SEED
SPARQL
SPARQL
FEDERATION
Knowledge Here!
SEED SPARQL
INTEGRATION Data in = Connectors
CONNECTORS = CSV + XML + SQL + SPARQL load everything flexible format support map external data into a seed’s model
any predicate matches data from... csv columns xml XPath results SQL table columns SPARQL query variables
FEDERATION Data out = APIs
API = SPARQL + REST + JAVA code your own apps in any programming language available for desktop, web or mobile
one seed, multiple apps or multiple seeds, one app federate to existing apps access with REST or SPARQL distributed knowledge network
¢
¢
¢
Setting it up... ¢ ¢
http://bioinformatics.ua.pt/coeus
¢
STRATEGY What are our moves?
1 CONFIGURE 2 BUILD 3 EXPLORE
CONFIGURATION Where’s everybody?
CONFIGURATION = JS FILE + (ONTOLOGY * SETUP) local app configuration JSON object in JavaScript file defines application properties (name, version, environment‌)
define seed ontology then setup resources seed ontology
resource setup
based on COEUS ontology
resource connectors configuration
your app data model
ontology mappings
IST2011 I-Semantics Tweets 2011: our brand new app
ID
Name
dc:identifier
ist:Tweet
ist:hasAuthor
foaf:name
ist:Author Title
ist:hasURI
dc:title
ist:hasLink
Link
ist:hasPublicationDate
Date
URI
... <owl:NamedIndividual rdf:about="http://bioinformatics.ua.pt/coeus/resource_Twitter"> <rdf:type rdf:resource="http://bioinformatics.ua.pt/coeus/Resource"/> <rdfs:label rdf:datatype="&xsd;string">resource_twitter</rdfs:label> <query rdf:datatype="&xsd;string">//entry</query> <order rdf:datatype="&xsd;integer">10</order> <dc:title rdf:datatype="&xsd;string">Twitter</dc:title> <dc:creator rdf:datatype="&xsd;string">Pedro Lopes pedrolopes@ua.pt</dc:creator> <dc:description rdf:datatype="&xsd;string">Resource connecting Twitter information.</dc:description> <method rdf:datatype="&xsd;string">cache</method> <endpoint rdf:datatype="&xsd;string">http://search.twitter.com/search.atom?q=iknow2011</endpoint> <dc:publisher rdf:datatype="&xsd;string">xml</dc:publisher> <isResourceOf rdf:resource="http://bioinformatics.ua.pt/coeus/concept_Twitter"/> <loadsFrom rdf:resource="http://bioinformatics.ua.pt/coeus/xml_Twitter_title"/> <loadsFrom rdf:resource="http://bioinformatics.ua.pt/coeus/xml_Twitter_link"/> ... <loadsFrom rdf:resource="http://bioinformatics.ua.pt/coeus/xml_Twitter_id"/> </owl:NamedIndividual>
... <owl:NamedIndividual rdf:about="http://bioinformatics.ua.pt/coeus/resource_Twitter"> <rdf:type rdf:resource="http://bioinformatics.ua.pt/coeus/Resource"/> <rdfs:label rdf:datatype="&xsd;string">resource_twitter</rdfs:label> <query rdf:datatype="&xsd;string">//entry</query> <order rdf:datatype="&xsd;integer">10</order> <dc:title rdf:datatype="&xsd;string">Twitter</dc:title> <dc:creator rdf:datatype="&xsd;string">Pedro Lopes pedrolopes@ua.pt</dc:creator> <dc:description rdf:datatype="&xsd;string">Resource connecting Twitter information.</dc:description> <method rdf:datatype="&xsd;string">cache</method> <endpoint rdf:datatype="&xsd;string">http://search.twitter.com/search.atom?q=iknow2011</endpoint> <dc:publisher rdf:datatype="&xsd;string">xml</dc:publisher> <isResourceOf rdf:resource="http://bioinformatics.ua.pt/coeus/concept_Twitter"/> <loadsFrom rdf:resource="http://bioinformatics.ua.pt/coeus/xml_Twitter_title"/> <loadsFrom rdf:resource="http://bioinformatics.ua.pt/coeus/xml_Twitter_link"/> ... <loadsFrom rdf:resource="http://bioinformatics.ua.pt/coeus/xml_Twitter_id"/> </owl:NamedIndividual> ... <owl:NamedIndividual rdf:about="http://bioinformatics.ua.pt/coeus/xml_Twitter_title"> <rdf:type rdf:resource="http://bioinformatics.ua.pt/coeus/XML"/> <rdfs:label rdf:datatype="&xsd;string">xml_twitter_title</rdfs:label> <query rdf:datatype="&xsd;string">//title</query> <dc:creator rdf:datatype="&xsd;string">Pedro Lopes pedrolopes@ua.pt</dc:creator> <property rdf:datatype="&xsd;string">dc:title</property> </owl:NamedIndividual> <owl:NamedIndividual rdf:about="http://bioinformatics.ua.pt/coeus/xml_Twitter_link"> <rdf:type rdf:resource="http://bioinformatics.ua.pt/coeus/XML"/> <rdfs:label rdf:datatype="&xsd;string">xml_twitter_link</rdfs:label> <query rdf:datatype="&xsd;string">//link[@href]</query> <dc:creator rdf:datatype="&xsd;string">Pedro Lopes pedrolopes@ua.pt</dc:creator> <property rdf:datatype="&xsd;string">ist:hasLink</property> </owl:NamedIndividual> <owl:NamedIndividual rdf:about="http://bioinformatics.ua.pt/coeus/xml_Twitter_id"> <rdf:type rdf:resource="http://bioinformatics.ua.pt/coeus/XML"/> <rdfs:label rdf:datatype="&xsd;string">xml_twitter_id</rdfs:label> <query rdf:datatype="&xsd;string">//id</query> <dc:creator rdf:datatype="&xsd;string">Pedro Lopes pedrolopes@ua.pt</dc:creator> <property rdf:datatype="&xsd;string">dc:identifier</property> </owl:NamedIndividual> ...
BUILDING Getting data together...
... <owl:NamedIndividual rdf:about="http://bioinformatics.ua.pt/coeus/xml_Twitter_title"> <rdf:type rdf:resource="http://bioinformatics.ua.pt/coeus/XML"/> <rdfs:label rdf:datatype="&xsd;string">xml_twitter_title</rdfs:label> <query rdf:datatype="&xsd;string">//title</query> <dc:creator rdf:datatype="&xsd;string">Pedro Lopes pedrolopes@ua.pt</dc:creator> <property rdf:datatype="&xsd;string">dc:title</property> </owl:NamedIndividual> <owl:NamedIndividual rdf:about="http://bioinformatics.ua.pt/coeus/xml_Twitter_link"> <rdf:type rdf:resource="http://bioinformatics.ua.pt/coeus/XML"/> <rdfs:label rdf:datatype="&xsd;string">xml_twitter_link</rdfs:label> <query rdf:datatype="&xsd;string">//link[@href]</query> <dc:creator rdf:datatype="&xsd;string">Pedro Lopes pedrolopes@ua.pt</dc:creator> <property rdf:datatype="&xsd;string">ist:hasLink</property> </owl:NamedIndividual> <owl:NamedIndividual rdf:about="http://bioinformatics.ua.pt/coeus/xml_Twitter_id"> <rdf:type rdf:resource="http://bioinformatics.ua.pt/coeus/XML"/> <rdfs:label rdf:datatype="&xsd;string">xml_twitter_id</rdfs:label> <query rdf:datatype="&xsd;string">//id</query> <dc:creator rdf:datatype="&xsd;string">Pedro Lopes pedrolopes@ua.pt</dc:creator> <property rdf:datatype="&xsd;string">dc:identifier</property> </owl:NamedIndividual> ...
... <entry> <id>tag:search.twitter.com,2005:111391828925890561</id> <published>2011-09-07T10:54:16Z</published> <link type="text/html" href="..." rel="alternate"/> <title>die twitterwall auf der #iknow2011 http://t.co/LsxFLDk #visibletweets</title> <content type="html">die twitterwall auf â&#x20AC;Ś</content> <updated>2011-09-07T10:54:16Z</updated> <link type="image/png" href="..." rel="image"/> <twitter:source>&lt;a href="http://www.tweetdeck.com" â&#x20AC;Ś /a&gt;</twitter:source> <twitter:lang>en</twitter:lang> <author> <name>issi (Isabel Anger)</name> <uri>http://twitter.com/issi</uri> </author> </entry> ...
... <owl:NamedIndividual rdf:about="http://bioinformatics.ua.pt/coeus/xml_Twitter_title"> <rdf:type rdf:resource="http://bioinformatics.ua.pt/coeus/XML"/> <rdfs:label rdf:datatype="&xsd;string">xml_twitter_title</rdfs:label> <query rdf:datatype="&xsd;string">//title</query> <dc:creator rdf:datatype="&xsd;string">Pedro Lopes pedrolopes@ua.pt</dc:creator> <property rdf:datatype="&xsd;string">dc:title</property> </owl:NamedIndividual> <owl:NamedIndividual rdf:about="http://bioinformatics.ua.pt/coeus/xml_Twitter_link"> <rdf:type rdf:resource="http://bioinformatics.ua.pt/coeus/XML"/> <rdfs:label rdf:datatype="&xsd;string">xml_twitter_link</rdfs:label> <query rdf:datatype="&xsd;string">//link[@href]</query> <dc:creator rdf:datatype="&xsd;string">Pedro Lopes pedrolopes@ua.pt</dc:creator> <property rdf:datatype="&xsd;string">ist:hasLink</property> </owl:NamedIndividual> <owl:NamedIndividual rdf:about="http://bioinformatics.ua.pt/coeus/xml_Twitter_id"> <rdf:type rdf:resource="http://bioinformatics.ua.pt/coeus/XML"/> <rdfs:label rdf:datatype="&xsd;string">xml_twitter_id</rdfs:label> <query rdf:datatype="&xsd;string">//id</query> <dc:creator rdf:datatype="&xsd;string">Pedro Lopes pedrolopes@ua.pt</dc:creator> <property rdf:datatype="&xsd;string">dc:identifier</property> </owl:NamedIndividual> ...
... <entry> <id>tag:search.twitter.com,2005:111391828925890561</id> <published>2011-09-07T10:54:16Z</published> <link type="text/html" href="..." rel="alternate"/> <title>die twitterwall auf der #iknow2011 http://t.co/LsxFLDk #visibletweets</title> <content type="html">die twitterwall auf â&#x20AC;Ś</content> <updated>2011-09-07T10:54:16Z</updated> <link type="image/png" href="..." rel="image"/> <twitter:source>&lt;a href="http://www.tweetdeck.com" â&#x20AC;Ś /a&gt;</twitter:source> <twitter:lang>en</twitter:lang> <author> <name>issi (Isabel Anger)</name> <uri>http://twitter.com/issi</uri> </author> </entry> ...
... <owl:NamedIndividual rdf:about="http://bioinformatics.ua.pt/coeus/xml_Twitter_title"> <rdf:type rdf:resource="http://bioinformatics.ua.pt/coeus/XML"/> <rdfs:label rdf:datatype="&xsd;string">xml_twitter_title</rdfs:label> <query rdf:datatype="&xsd;string">//title</query> <dc:creator rdf:datatype="&xsd;string">Pedro Lopes pedrolopes@ua.pt</dc:creator> <property rdf:datatype="&xsd;string">dc:title</property> </owl:NamedIndividual> <owl:NamedIndividual rdf:about="http://bioinformatics.ua.pt/coeus/xml_Twitter_link"> <rdf:type rdf:resource="http://bioinformatics.ua.pt/coeus/XML"/> <rdfs:label rdf:datatype="&xsd;string">xml_twitter_link</rdfs:label> <query rdf:datatype="&xsd;string">//link[@href]</query> <dc:creator rdf:datatype="&xsd;string">Pedro Lopes pedrolopes@ua.pt</dc:creator> <property rdf:datatype="&xsd;string">ist:hasLink</property> </owl:NamedIndividual> <owl:NamedIndividual rdf:about="http://bioinformatics.ua.pt/coeus/xml_Twitter_id"> <rdf:type rdf:resource="http://bioinformatics.ua.pt/coeus/XML"/> <rdfs:label rdf:datatype="&xsd;string">xml_twitter_id</rdfs:label> <query rdf:datatype="&xsd;string">//id</query> <dc:creator rdf:datatype="&xsd;string">Pedro Lopes pedrolopes@ua.pt</dc:creator> <property rdf:datatype="&xsd;string">dc:identifier</property> </owl:NamedIndividual> ...
... <entry> <id>tag:search.twitter.com,2005:111391828925890561</id> <published>2011-09-07T10:54:16Z</published> <link type="text/html" href="..." rel="alternate"/> <title>die twitterwall auf der #iknow2011 http://t.co/LsxFLDk #visibletweets</title> <content type="html">die twitterwall auf â&#x20AC;Ś</content> <updated>2011-09-07T10:54:16Z</updated> <link type="image/png" href="..." rel="image"/> <twitter:source>&lt;a href="http://www.tweetdeck.com" â&#x20AC;Ś /a&gt;</twitter:source> <twitter:lang>en</twitter:lang> <author> <name>issi (Isabel Anger)</name> <uri>http://twitter.com/issi</uri> </author> </entry> ...
... <owl:NamedIndividual rdf:about="http://bioinformatics.ua.pt/coeus/xml_Twitter_title"> <rdf:type rdf:resource="http://bioinformatics.ua.pt/coeus/XML"/> <rdfs:label rdf:datatype="&xsd;string">xml_twitter_title</rdfs:label> <query rdf:datatype="&xsd;string">//title</query> <dc:creator rdf:datatype="&xsd;string">Pedro Lopes pedrolopes@ua.pt</dc:creator> <property rdf:datatype="&xsd;string">dc:title</property> </owl:NamedIndividual> <owl:NamedIndividual rdf:about="http://bioinformatics.ua.pt/coeus/xml_Twitter_link"> <rdf:type rdf:resource="http://bioinformatics.ua.pt/coeus/XML"/> <rdfs:label rdf:datatype="&xsd;string">xml_twitter_link</rdfs:label> <query rdf:datatype="&xsd;string">//link[@href]</query> <dc:creator rdf:datatype="&xsd;string">Pedro Lopes pedrolopes@ua.pt</dc:creator> <property rdf:datatype="&xsd;string">ist:hasLink</property> </owl:NamedIndividual> <owl:NamedIndividual rdf:about="http://bioinformatics.ua.pt/coeus/xml_Twitter_id"> <rdf:type rdf:resource="http://bioinformatics.ua.pt/coeus/XML"/> <rdfs:label rdf:datatype="&xsd;string">xml_twitter_id</rdfs:label> <query rdf:datatype="&xsd;string">//id</query> <dc:creator rdf:datatype="&xsd;string">Pedro Lopes pedrolopes@ua.pt</dc:creator> <property rdf:datatype="&xsd;string">dc:identifier</property> </owl:NamedIndividual> ...
... <entry> <id>tag:search.twitter.com,2005:111391828925890561</id> <published>2011-09-07T10:54:16Z</published> <link type="text/html" href="..." rel="alternate"/> <title>die twitterwall auf der #iknow2011 http://t.co/LsxFLDk #visibletweets</title> <content type="html">die twitterwall auf â&#x20AC;Ś</content> <updated>2011-09-07T10:54:16Z</updated> <link type="image/png" href="..." rel="image"/> <twitter:source>&lt;a href="http://www.tweetdeck.com" â&#x20AC;Ś /a&gt;</twitter:source> <twitter:lang>en</twitter:lang> <author> <name>issi (Isabel Anger)</name> <uri>http://twitter.com/issi</uri> </author> </entry> ...
SEMANTIC WEB TRANSLATION triplify data app setup + data = triples
subject - predicate - object subject created at runtime
predicate configured in app setup
object loaded from resource data
EXPLORING Also getting data together...
JUST USE THE API! Joseki server
SPARQL
perform SPARQL queries get data in multiple formats
GET request for all data
REST
…/api/<key>:<value> for relationships …api/sub/pred/obj/<format> for specific content
JAVA
abstracted from Jena’s methods
¢
¢
¢
¢
Where? ¢ ¢
http://bioinformatics.ua.pt/coeus
Understanding the Human Variome Reading the â&#x20AC;&#x153;Book-of-Lifeâ&#x20AC;?
Collect genetics datasets Enrich them
Targeted at gene curators http://bioinformatics.ua.pt/WAVe
Hub for Rare Disease Information Link aggregation
Connects diseases with... Genes, Enzymes, Pathways, Literature
Targeted at clinicians/students http://bioinformatics.ua.pt/diseasecard
Remember biomedical applications?
SPARQL
Your
Your
Your
App
App
App
Here!
Here!
Here!
SPARQL
SPARQL
SPARQL
SPARQL
FEDERATION
Knowledge Here!
Knowledge Here!
Knowledge Here!
Knowledge Here! Knowledge Here! Knowledge Here!
Knowledge Here!
Knowledge Here!
¢
¢
¢
¢
¢
http://bioinformatics.ua.pt/coeus
Future ¢
TODO Extend
API
Include SPARQL endpoint automagically Improve data input Add SOAP
Add support for
LINKED DATA Tests, Tests &
TESTS!
Interested in having your own COEUS seed?
To infinity! And beyond...
‣ Architecture
Wrapping it all up... ‣ Specification
“Semantic Web-in-a-box”
INTEGRATION + EXPLORATION
CONNECTORS
API
csv, sql, xml, sparql
java, rest
=FEDERATION
KNOWLEDGE NETWORK
sparql
“Semantic Web-in-a-box”
INTEGRATION + EXPLORATION
CONNECTORS
API
csv, sql, xml, sparql
java, rest
=FEDERATION
KNOWLEDGE NETWORK
http://bioinformatics.ua.pt/coeus
sparql
THANK YOU! Questions and Feedback are welcome!
http://bioinformatics.ua.pt/coeus