rd
3 Status report of degree project

           Integrating SWI-Prolog
      for semantic reasoning in Bioclipse
        ...
Research question



How do biochemical questions
 formulated as Prolog queries
  compare to other solutions
available in ...
Compared Semantic Tools

●   Jena
    ●   General RDF querying (via SPARQL)
● Pellet
  ● OWL-DL Reasoning (via SPARQL)


 ...
Use Case: NMRShiftDB



Interesting use case:
Querying NMRShiftDB data
 ● Characteristics:


   – Rather shallow RDF graph...
NMR Spectrum Similarity Search

                        What to test:
                        Given a spectrum,
          ...
Example Data

<http://pele.farmbio.uu.se/nmrshiftdb/?moleculeId=234>
     :hasSpectrum <http://pele.farmbio.uu.se/nmrshift...
% Register RDF namespaces, for use in the convenience methods at the end
              :- rdf_register_ns(nmr, 'http://www...
PREFIX owl: <http://www.w3.org/2002/07/owl#>


SPARQL code
              PREFIX afn: <http://jena.hpl.hp.com/ARQ/function#...
“Expressiveness”
“Expressivity”: SPARQL vs Prolog




   SPARQL            PROLOG
Prolog predicate taking variables

  How to change “input parameters”?
● SPARQL: Modify SPARQL query


● Prolog: Change in...
Observations

● SPARQL
  ● Fewer lines of code


  ● Easier to understand the code


● Prolog


  ● Easier to change input...
Performance
Prolog vs Jena vs JenaTDB vs Pellet
Prolog vs Jena vs JenaTDB
Observations

● Prolog is the fastest (in-memory only)
● Jena faster with disk based than with

  in-memory RDF store!
● P...
Project plan from last




Planned final presentation: 28 april 2010 (BMC B7:101a)
                 Everybody is welcome!
Thank you!
Project blog: http://saml.rilspace.com
Upcoming SlideShare
Loading in...5
×

3rd Proj. Update: Integrating SWI-Prolog for Semantic Reasoning in Bioclipse

2,978

Published on

The third and last project update on my thesis project titled &quot;Integrating SWI-Prolog for Semantic Reasoning in Bioclipse&quot;

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,978
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
22
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

3rd Proj. Update: Integrating SWI-Prolog for Semantic Reasoning in Bioclipse

  1. 1. rd 3 Status report of degree project Integrating SWI-Prolog for semantic reasoning in Bioclipse Samuel Lampa, 2010-04-07 Project blog: http://saml.rilspace.com
  2. 2. Research question How do biochemical questions formulated as Prolog queries compare to other solutions available in Bioclipse in terms of speed and expressiveness?
  3. 3. Compared Semantic Tools ● Jena ● General RDF querying (via SPARQL) ● Pellet ● OWL-DL Reasoning (via SPARQL) ● General querying via Jena (via SPARQL) ● SWI-Prolog ● Access to RDF triples (both assertion and querying) via the rdf( Subject, Predicate, Object ) method ● Complex wrapper/convenience methods can be built
  4. 4. Use Case: NMRShiftDB Interesting use case: Querying NMRShiftDB data ● Characteristics: – Rather shallow RDF graph – Numeric (float value) interval matching
  5. 5. NMR Spectrum Similarity Search What to test: Given a spectrum, represented as a list of shift values, find spectra with the same shifts, (allowing Intensity variation within a limit). Shift → “Dereferencing” spectra
  6. 6. Example Data <http://pele.farmbio.uu.se/nmrshiftdb/?moleculeId=234> :hasSpectrum <http://pele.farmbio.uu.se/nmrshiftdb/? spectrumId=4735>; :moleculeId "234". <http://pele.farmbio.uu.se/nmrshiftdb/?spectrumId=4735> :hasPeak <http://pele.farmbio.uu.se/nmrshiftdb/?s4735p0>, <http://pele.farmbio.uu.se/nmrshiftdb/?s4735p1>, <http://pele.farmbio.uu.se/nmrshiftdb/?s4735p2>, <http://pele.farmbio.uu.se/nmrshiftdb/?s4735p0> :hasShift "17.6"^^xsd:decimal . <http://pele.farmbio.uu.se/nmrshiftdb/?s4735p1> :hasShift "18.3"^^xsd:decimal . <http://pele.farmbio.uu.se/nmrshiftdb/?s4735p2> :hasShift "22.6"^^xsd:decimal .
  7. 7. % Register RDF namespaces, for use in the convenience methods at the end :- rdf_register_ns(nmr, 'http://www.nmrshiftdb.org/onto#'). Prolog code :- rdf_register_ns(xsd, 'http://www.w3.org/2001/XMLSchema#'). find_mol_with_peak_vals_near( SearchShiftVals, Mols ) :- % Pick the Mols in 'Mol', that match the pattern: % list_peak_shifts_of_mol( Mol, MolShiftVals ), contains_list_elems_near( SearchShiftVals, MolShiftVals ) % and collect them in 'Mols'. setof( Mol, ( list_peak_shifts_of_mol( Mol, MolShiftVals ), % A Mol's shift values are collected contains_list_elems_near( SearchShiftVals, MolShiftVals ) ), % and compared against the given SearchShiftVals [Mols|MolTail] ). % In 'Mols', all 'Mol's, for which their shift % values match the SearchShiftVals, are collected. % Given a 'Mol', give it's shiftvalues in list form, in 'ListOfPeaks' list_peak_shifts_of_mol( Mol, ListOfPeaks ) :- has_spectrum( Mol, Spectrum ), findall( ShiftVal, ( has_peak( Spectrum, Peak ), has_shift_val( Peak, ShiftVal ) ), ListOfPeaks ). % Compare two lists to see if list2 has near-matches for each of the values in list1 contains_list_elems_near( [ElemHead|ElemTail], List ) :- member_close_to( ElemHead, List ), ( contains_list_elems_near( ElemTail, List ); ElemTail == [] ). %%%%%%%%%%%%%%%%%%%%%%%% % Recursive construct: % %%%%%%%%%%%%%%%%%%%%%%%% % Test first the end criterion: member_close_to( X, [ Y | Tail ] ) :- closeTo( X, Y ). % but if the above doesn't validate, then recursively continue with the tail of List2: member_close_to( X, [ Y | Tail ] ) :- member_close_to( X, Tail ). % Numerical near-match closeTo( Val1, Val2 ) :- abs(Val1 - Val2) =< 0.3. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Convenience accessory methods % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% has_shift_val( Peak, ShiftVal ) :- rdf( Peak, nmr:hasShift, literal(type(xsd:decimal, ShiftValLiteral))), atom_number_create( ShiftValLiteral, ShiftVal ). has_spectrum( Subject, Predicate ) :- rdf( Subject, nmr:has_spectrum, Predicate). has_peak( Subject, Predicate ) :- rdf( Subject, nmr:has_peak, Predicate). % Wrapper method for the atom_number/2 method which converts atoms (string constants) to number. % The wrapper methods avoids exceptions on empty atoms, instead converting into a zero. atom_number_create( Atom, Number ) :- atom_length( Atom, AtomLength ), AtomLength > 0 -> % IF atom is not empty atom_number( Atom, Number ); % THEN Convert the atom to a numerical value atom_number( '0', Number ). % ELSE Convert to a zero ");
  8. 8. PREFIX owl: <http://www.w3.org/2002/07/owl#> SPARQL code PREFIX afn: <http://jena.hpl.hp.com/ARQ/function#> PREFIX fn: <http://www.w3.org/2005/xpath-functions#> PREFIX nmr: <http://www.nmrshiftdb.org/onto#> PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> SELECT ?s WHERE { ?s nmr:hasPeak [ nmr:hasShift ?s1 ] , [ nmr:hasShift ?s2 ] , [ nmr:hasShift ?s3 ] , [ nmr:hasShift ?s4 ] , [ nmr:hasShift ?s5 ] , [ nmr:hasShift ?s6 ] , [ nmr:hasShift ?s7 ] , [ nmr:hasShift ?s8 ] , [ nmr:hasShift ?s9 ] , [ nmr:hasShift ?s10 ] , [ nmr:hasShift ?s11 ] , [ nmr:hasShift ?s12 ] , [ nmr:hasShift ?s13 ] , [ nmr:hasShift ?s14 ] , [ nmr:hasShift ?s15 ] , [ nmr:hasShift ?s16 ] . FILTER ( fn:abs(?s1 - 17.6) < 0.3 ) . FILTER ( fn:abs(?s2 - 18.3) < 0.3 ) . FILTER ( fn:abs(?s3 - 22.6) < 0.3 ) . FILTER ( fn:abs(?s4 - 26.5) < 0.3 ) . FILTER ( fn:abs(?s5 - 31.7) < 0.3 ) . FILTER ( fn:abs(?s6 - 33.5) < 0.3 ) . FILTER ( fn:abs(?s7 - 33.5) < 0.3 ) . FILTER ( fn:abs(?s8 - 41.8) < 0.3 ) . FILTER ( fn:abs(?s9 - 42.0) < 0.3 ) . FILTER ( fn:abs(?s10 - 42.2) < 0.3 ) . FILTER ( fn:abs(?s11 - 78.34) < 0.3 ) . FILTER ( fn:abs(?s12 - 140.99) < 0.3 ) . FILTER ( fn:abs(?s13 - 158.3) < 0.3 ) . FILTER ( fn:abs(?s14 - 193.4) < 0.3 ) . FILTER ( fn:abs(?s15 - 203.0) < 0.3 ) . FILTER ( fn:abs(?s16 - 0) < 0.3 ) . }
  9. 9. “Expressiveness”
  10. 10. “Expressivity”: SPARQL vs Prolog SPARQL PROLOG
  11. 11. Prolog predicate taking variables How to change “input parameters”? ● SPARQL: Modify SPARQL query ● Prolog: Change input parameter
  12. 12. Observations ● SPARQL ● Fewer lines of code ● Easier to understand the code ● Prolog ● Easier to change input parameters ● Easier to re-use existing logic (call a method rather than cut and paste SPARQL code) ● Easier to change aspects of the execution logic
  13. 13. Performance
  14. 14. Prolog vs Jena vs JenaTDB vs Pellet
  15. 15. Prolog vs Jena vs JenaTDB
  16. 16. Observations ● Prolog is the fastest (in-memory only) ● Jena faster with disk based than with in-memory RDF store! ● Pellet with in-memory store is slow ● Pellet with disk based store out of question
  17. 17. Project plan from last Planned final presentation: 28 april 2010 (BMC B7:101a) Everybody is welcome!
  18. 18. Thank you! Project blog: http://saml.rilspace.com
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×