The SADI plug-in to the    IO Informatics’ Knowledge Explorer...a quick explanation of howwe “boot-strap” semantics...
Semantic Automated Discovery and Integration         A simple set of Semantic Web Service design patterns  that result in ...
SADI in a nutshell...                      Service Description                   INPUT OWL Class                   NamedIn...
SADI in a nutshell...                                            POST http://example.org/myservice                        ...
SADI in a nutshell...Service DescriptionINPUT OWL ClassNamedIndividual: things with     a “name” property               IN...
SADI in a nutshell...                          RegistryI have data witha “name” property                                  ...
Sentient Knowledge Explorer is a retrieval, integration, visualization,   query, and exploration environment for semantica...
Most imported data-sets will already have       properties (e.g. “encodes”)   …and the data will already be typed       (e...
Now what...??No properties...No rdf:type...How do I find a service using that node?What *is* that node anyway??
In the case of LSRN URIs, they resolve to:<lsrn:DragonDB_Locus_Record rdf:about="http://lsrn.org/DragonDB_Locus:CHO"> <dc:...
In the case of LSRN URIs, they resolve to:<lsrn:DragonDB_Locus_Record rdf:about="http://lsrn.org/DragonDB_Locus:CHO"> <dc:...
Now we have enough information to start exploring global data...
Menu option provided by the plugin
Discovered the (only)service that consumesthese kinds of records
Output is added to the graph (with someextra logic to make visualization of complexdata structures a bit easier)
Lather, rinse, repeat...
...and of course,these links are “live”
What about URIs other than LSRN?
HTTP POST the URI to the SHARE Resolverservice and it will (try to) return you SIO- compliant RDF metadata about that URI ...
Next problem:   Knowledge Explorer and therefore the plug-in     are written in C# All of our interfaces are     described...
This problem manifests itself in two ways:1. An individual on the KE canvas has all the properties   required by a Service...
If I select a canvas node, and ask SADI tofind services, it will...
The get_sequence_for_region servicerequired ALL of this (hidden) information
Nevertheless:(a) The service can be discovered based on JUST this node selection(b) The service can be invoked based on JU...
Voila!How did the plug-in discover the service, anddetermine which data was required to access    that service based on an...
SELECT ?x, ?y                                       FROM knowledge_explorer_database                                      ...
Just to ensure that I don’t over-trivialize this point,the REAL SPARQL query that extracts the input for this service is...
CONSTRUCT {              ?input a <http://sadiframework.org/ontologies/GMOD/BiopolymerRegion.owl#BiopolymerRegion> .      ...
Summary   While the Knowledge Explorer plug-in has similar functionality to other tools we have built for SADI, ittakes ad...
University of British Columbia    Mark Wilkinson, Project Lead               Luke McCarthy               Lead Developer, S...
Microsoft ResearchThe Knowledge ExplorerPersonal Edition,and the SADI plug-in, arefreely available.
SWAT4LS 2011: SADI Knowledge Explorer Plug-in
SWAT4LS 2011: SADI Knowledge Explorer Plug-in
SWAT4LS 2011: SADI Knowledge Explorer Plug-in
SWAT4LS 2011: SADI Knowledge Explorer Plug-in
SWAT4LS 2011: SADI Knowledge Explorer Plug-in
SWAT4LS 2011: SADI Knowledge Explorer Plug-in
Upcoming SlideShare
Loading in …5
×

SWAT4LS 2011: SADI Knowledge Explorer Plug-in

947 views

Published on

my presentation of the SADI plug-in to the IO Informatics' Knowledge Explorer. Presented at SWAT4LS (Semantic Web Applications and Tools for Life Sciences), London, UK, December, 2011. It describes how we resolve identifiers to semantic metadata in a variety of ways in order to boot-strap the semantics required to do service discovery and matching. It also describes how we convert OWL classes into approximately matching SPARQL queries, and store these queries in the SADI registry such that, after service discovery, it is simple to extract the data a service requires as its input.

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
947
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
13
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

SWAT4LS 2011: SADI Knowledge Explorer Plug-in

  1. 1. The SADI plug-in to the IO Informatics’ Knowledge Explorer...a quick explanation of howwe “boot-strap” semantics...
  2. 2. Semantic Automated Discovery and Integration A simple set of Semantic Web Service design patterns that result in greatly-improved interoperability and discoverability
  3. 3. SADI in a nutshell... Service Description INPUT OWL Class NamedIndividual: things with a “name” property from “foaf” ontology OUTPUT OWL Class GreetedIndividual: things with a “greeting” property from “hello” ontologyAn owl:Individual of the ServiceDescription class from the myGrid/Moby ontology
  4. 4. SADI in a nutshell... POST http://example.org/myservice person:1Service Description foaf:name rdf:typeINPUT OWL ClassNamedIndividual: things with hello:Named a “name” property Guy Incognito Individual from “foaf” ontologyOUTPUT OWL ClassGreetedIndividual: things with a “greeting” property person:1 from “hello” ontology hello:greeting rdf:type hello:Greeted Hello, Guy Incognito! Individual
  5. 5. SADI in a nutshell...Service DescriptionINPUT OWL ClassNamedIndividual: things with a “name” property INDEX from “foaf” ontology The service Registry provides aOUTPUT OWL Class “greeting”GreetedIndividual: things with property based a “greeting” property from “hello” ontology on a “name” property
  6. 6. SADI in a nutshell... RegistryI have data witha “name” property Service Description INPUT OWL Class NamedIndividual: things with a “name” property from “foaf” ontology OUTPUT OWL Class GreetedIndividual: things with a “greeting” property from “hello” ontology
  7. 7. Sentient Knowledge Explorer is a retrieval, integration, visualization, query, and exploration environment for semantically rich data
  8. 8. Most imported data-sets will already have properties (e.g. “encodes”) …and the data will already be typed (e.g. “Gene” or “Protein”)…so finding SADI Services to consume that data is ~trivial
  9. 9. Now what...??No properties...No rdf:type...How do I find a service using that node?What *is* that node anyway??
  10. 10. In the case of LSRN URIs, they resolve to:<lsrn:DragonDB_Locus_Record rdf:about="http://lsrn.org/DragonDB_Locus:CHO"> <dc:identifier>CHO</dc:identifier> <sio:SIO_000671> <!-- has identifier --> <lsrn:DragonDB_Locus_Identifier> <sio:SIO_000300>CHO</sio:SIO_000300> <!-- has value --> </lsrn:DragonDB_Locus_Identifier> </sio:SIO_000671></lsrn:DragonDB_Locus_Record></rdf:RDF>
  11. 11. In the case of LSRN URIs, they resolve to:<lsrn:DragonDB_Locus_Record rdf:about="http://lsrn.org/DragonDB_Locus:CHO"> <dc:identifier>CHO</dc:identifier> <sio:SIO_000671> <!-- has identifier --> <lsrn:DragonDB_Locus_Identifier> <sio:SIO_000300>CHO</sio:SIO_000300> <!-- has value --> </lsrn:DragonDB_Locus_Identifier> </sio:SIO_000671></lsrn:DragonDB_Locus_Record></rdf:RDF> The Semantic Science Integrated Ontology (Dumontier) has a model for how to describe database records, including explicitly making the record identifier an attribute of that record; in our LSRN metadata, we also explicitly rdf:type both records and identifiers.
  12. 12. Now we have enough information to start exploring global data...
  13. 13. Menu option provided by the plugin
  14. 14. Discovered the (only)service that consumesthese kinds of records
  15. 15. Output is added to the graph (with someextra logic to make visualization of complexdata structures a bit easier)
  16. 16. Lather, rinse, repeat...
  17. 17. ...and of course,these links are “live”
  18. 18. What about URIs other than LSRN?
  19. 19. HTTP POST the URI to the SHARE Resolverservice and it will (try to) return you SIO- compliant RDF metadata about that URI (this is a typical SADI service) The resolver currently recognizes a fewdifferent URI schemes (e.g. Bio2RDF) andcan be updated with new patterns easily
  20. 20. Next problem: Knowledge Explorer and therefore the plug-in are written in C# All of our interfaces are described in OWLC# reasoners are extremely limited at this time
  21. 21. This problem manifests itself in two ways:1. An individual on the KE canvas has all the properties required by a Service in the registry, but is not rdf:typed as that Service’s input type  how do you discover that Service so that you can add it to the menu?2. For a selected Service from the menu, how does the plug-in know which data-elements it needs to extract from KE to send to that service in order to fulfil it’s input property-restrictions?
  22. 22. If I select a canvas node, and ask SADI tofind services, it will...
  23. 23. The get_sequence_for_region servicerequired ALL of this (hidden) information
  24. 24. Nevertheless:(a) The service can be discovered based on JUST this node selection(b) The service can be invoked based on JUST this node selection
  25. 25. Voila!How did the plug-in discover the service, anddetermine which data was required to access that service based on an OWL Class definition, without a reasoner?
  26. 26. SELECT ?x, ?y FROM knowledge_explorer_database WHERE { ?x foaf:name ?y } Convert Input OWL Class def’n into an ~equivalent SPARQL queryService DescriptionINPUT OWL Class Store togetherNamedIndividual: things with with index a “name” property INDEX from “foaf” ontology The service Registry provides aOUTPUT OWL Class “greeting”GreetedIndividual: things with property based a “greeting” property from “hello” ontology on a “name” property
  27. 27. Just to ensure that I don’t over-trivialize this point,the REAL SPARQL query that extracts the input for this service is...
  28. 28. CONSTRUCT { ?input a <http://sadiframework.org/ontologies/GMOD/BiopolymerRegion.owl#BiopolymerRegion> . ?input <http://sadiframework.org/ontologies/GMOD/BiopolymerRegion.owl#position> ?position . ?position a <http://sadiframework.org/ontologies/GMOD/RangedSequencePosition.owl#RangedSequencePosition> . ?position <http://sadiframework.org/ontologies/GMOD/RangedSequencePosition.owl#coordinate> ?start . ?start a <http://sadiframework.org/ontologies/GMOD/RangedSequencePosition.owl#StartPosition> . ?start <http://semanticscience.org/resource/SIO_000300> ?startValue . ?position <http://sadiframework.org/ontologies/GMOD/RangedSequencePosition.owl#coordinate> ?end . ?end a <http://sadiframework.org/ontologies/GMOD/RangedSequencePosition.owl#EndPosition> . ?end <http://semanticscience.org/resource/SIO_000300> ?endValue . ?position <http://sadiframework.org/ontologies/GMOD/RangedSequencePosition.owl#in_relation_to> ?sequence . ?sequence <http://semanticscience.org/resource/SIO_000210> ?feature . ?feature <http://semanticscience.org/resource/SIO_000008> ?identifier . ?identifier <http://semanticscience.org/resource/SIO_000300> ?featureID . ?sequence <http://semanticscience.org/resource/SIO_000210> ?strand . ?strand <http://semanticscience.org/resource/SIO_000093> ?strandFeature . ?strandFeature a ?strandFeatureType . ?strandFeature <http://semanticscience.org/resource/SIO_000008> ?strandFeatureIdentifier . ?strandFeatureIdentifier <http://semanticscience.org/resource/SIO_000300> ?strandFeatureID . ?strand a ?strandType .} WHERE { ?input <http://sadiframework.org/ontologies/GMOD/BiopolymerRegion.owl#position> ?position . ?position <http://sadiframework.org/ontologies/GMOD/RangedSequencePosition.owl#coordinate> ?start . ?start a <http://sadiframework.org/ontologies/GMOD/RangedSequencePosition.owl#StartPosition> . ?start <http://semanticscience.org/resource/SIO_000300> ?startValue . ?position <http://sadiframework.org/ontologies/GMOD/RangedSequencePosition.owl#coordinate> ?end . ?end a <http://sadiframework.org/ontologies/GMOD/RangedSequencePosition.owl#EndPosition> . ?end <http://semanticscience.org/resource/SIO_000300> ?endValue . ?position <http://sadiframework.org/ontologies/GMOD/RangedSequencePosition.owl#in_relation_to> ?sequence . { ?sequence <http://semanticscience.org/resource/SIO_000210> ?feature . ?feature <http://semanticscience.org/resource/SIO_000008> ?identifier . ?identifier <http://semanticscience.org/resource/SIO_000300> ?featureID . } UNION { ?sequence <http://semanticscience.org/resource/SIO_000210> ?strand . ?strand <http://semanticscience.org/resource/SIO_000093> ?strandFeature . { ?strandFeature a <http://sadiframework.org/ontologies/GMOD/Feature.owl#Feature> . } UNION { ?strandFeature <http://semanticscience.org/resource/SIO_000008> ?strandFeatureIdentifier . ?strandFeatureIdentifier <http://semanticscience.org/resource/SIO_000300> ?strandFeatureID . }. { ?strand a <http://sadiframework.org/ontologies/GMOD/Strand.owl#PlusStrand> . ?strand a ?strandType . } UNION { ?strand a <http://sadiframework.org/ontologies/GMOD/Strand.owl#MinusStrand> . ?strand a ?strandType . }. }.}
  29. 29. Summary While the Knowledge Explorer plug-in has similar functionality to other tools we have built for SADI, ittakes advantage of some features of the SADI Registry, and SADI in general, that are not widely-known. We hope that the availability of these featuresencourages development of SADI tooling in languages that have limited access to reasoning.
  30. 30. University of British Columbia Mark Wilkinson, Project Lead Luke McCarthy Lead Developer, SADI project Benjamin VanderValk Developer, SADI project
  31. 31. Microsoft ResearchThe Knowledge ExplorerPersonal Edition,and the SADI plug-in, arefreely available.

×