Friday, 25. January 2008

Combining Rules with SPARQL

a recent blog-post by Dan Brickley reminded me that we have a Jena-Rule engine augmented with SPARQL dusting our shelves. Its years old, but may be interesting for you.

We augmented Jena's rules by adding sparql.
The passing of parameters is easy, you just have to use the variables of the rules. Within Jena rules, you can always express graphs using N-Triple Axioms, so its also possible to write RDF files.
Only caveat: no quads.

code is in this folder
http://gnowsis.opendfki.de/browser/tags/0.8.3-alpha/gnowsis_retrieval/WEB-INF/src/org/gnowsis/retrieval/RuleQuerySparql.java

download SVN URI:
http://gnowsis.opendfki.de/repos/gnowsis/tags/0.8.3-alpha/gnowsis_retrieval/WEB-INF/src/org/gnowsis/retrieval/RuleQuerySparql.java

documentation:
http://gnowsis.opendfki.de/browser/tags/0.8.3-alpha/gnowsis_retrieval/doc/help.html

Here is a snippet of that documentation for you:

Inference

After the results have been gathered, inference rules are evaluated against the results.
This means, that you can define rules on which new information is generated
based on a declarative syntax described in the
Jena Rule Engine DOC.
An example file for these rules can be found in the source, at best directly in SVN here:
retrieval.rules.txt.
You can use the existing Jena rules and a special rule that was created by Leo Sauermann to
load additional triples from the gnowsis. This query-rule is defined as follows:

# Load triples from the search storage by a triple patter.
# The search storage is crawled by gnowsis IF you enabled it in the
# configuration and have crawled a few datasources. If not, this query
# will return nothing.

queryStorage(?subject, ?predicate, ?object, 'search')

# ?subject, ?predicate, ?object: a triple pattern. 
# Leave one of the empty (= a unbound variable like ?_x) and it will try to match 
# the empty thing as a wildcard. The variables are not bound in the pattern and
# cannot be used in the same rule. You have to write additional rules to work
# on the queried triples. 

usage example:
# load all project members and managers
(?project rdf:type org:Project) ->
queryStorage(?project, org:containsMember, ?_y, 'search'),
queryStorage(?project, org:managedBy, ?_z, 'search').

If you want to bind the variables and use them: It is not possible. See the
statement of the Jena developers
about this. But this is not a big problem, you can work around it easily.

Debugging Inference

If you want to tweak your inference rules and don't want to have gnowsis run the query at all times,
you can use our built-in inference debugging tricks.

  • first: when you run the query for debugging, click the 'rerun only rules' link at the bottom of your search
  • second: open the inference file by clicking 'edit rules file'
    (also found at the bottom of each search result)
the first stage brings you into a query mode, where pressing "reload" in the browser
just does the inference and the clustering, but not the search itself. This speeds up
your debugging of inference rules. You will only spot the difference in the addressbar
of the browser, which now contains something like http://.../retrieval?cmd=runrules&query=YourQuery

Also, note that syntax errors in your inference code will be logged to the gnowsis
logging system. This is either the message window, pane 'org.gnowsis.retrieval.RetrievalService'
or your file logging in ~/.gnowsis/data/... .
You will not see syntax errors in your query results, sorry.


Inference and SPARQL combined

SPARQL reference

You can also use SPARQL queries to refine and expand the search results.
The basic syntax is to run a SPARQL query in the head of a rule, the first argument
is the query, escaped with '', the following arguments are variables that will
be used in the query. The passed variables are interpreted as named variables
in the SPARQL query, named ?x1 ?x2 ?x3, etc.

Example for querySparql:

(?a ?b ?c) ->
querySparql('
 PREFIX rdfs:    <http://www.w3.org/2000/01/rdf-schema#>
 CONSTRUCT   { ?x1 rdfs:label ?label }
 WHERE       { ?x1 rdfs:label ?label }
')
', ?c).

The variable named ?x1 will be replaced with the value of ?c.

Note the
following tips:
  • literals are escaped using the \'text\' markup.
  • All arguments passed after the query will be bound into the query using names ?x1, ?x2, ...
  • querySparql can only be used in the head of rules.
  • Attention: if you are querying the gnowsis biggraph, you have to add the graph-name to your
    sparql queries.
  • Try out your queries on the debug interface before you use them.
  • Only 'construct' queries are supported, not select or describe.
  • Namespace prefixes: inside the SPARQL query, you can use the namespace prefixes defined in the rule file
An example to do so is given now, the task here is to retrieve the members of a project if a project
was in the result.
#note that these namespace prefixes are available in the sparql query
@prefix skos: <http://www.w3.org/2004/02/skos/core#>.
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
@prefix rdf:  <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix owl:  <http://www.w3.org/2002/07/owl#>.
@prefix retrieve: <http://www.gnowsis.org/ont/gnoretrieve#>.
@prefix tag: <http://www.gnowsis.org/ont/gnoretrievetag#>.

# get members with SPARQL
# note the special namspace defined inside
(?hit retrieve:item ?project),
(?project rdf:type org:Project) ->
querySparql('
PREFIX org: <http://km.dfki.de/model/org#>
CONSTRUCT   { 
  ?x1 org:containsMember ?m. ?m rdfs:label ?labelm. ?m rdf:type ?typem.
  ?x1 tag:todoRelateHitTo _:hit .
  _:hit rdf:type retrieve:InferedHit .
  _:hit retrieve:item ?m .
  _:hit retrieve:textSnippet \'member of project\'.
}
WHERE       { graph ?g {
  ?x1 org:containsMember ?m. ?m rdfs:label ?labelm. ?m rdf:type ?typem.
} }
', ?project).

# make the missing relations to the hits
# this is needed because you cannot pass blank nodes into the SPARQL engine.
(?item tag:todoRelateHitTo ?tohit),
(?hit retrieve:item ?item) ->
(?hit retrieve:related ?tohit).
run a sparql query, replacing placeholders (?x1, ?x2, ...) in the query with the passed arguments,
arguments have to be bound. Only 'construct' queries are supported.
 
# retrieve a test sparql
[test:
(http://xmlns.com/foaf/0.1/ ?x ?type)
-> querySparql('
CONSTRUCT   { ?x1 rdfs:label ?label }
WHERE       { ?x1 rdfs:label ?label. FILTER (?x1 = foaf:name) }
')
]

# retrieve with param - bind ?ont to the foaf ontology, it is called x1 in the query
[testbind:
(?ont rdf:type owl:Ontology)
-> querySparql('
CONSTRUCT   { ?p rdfs:isDefinedBy ?x1. ?p rdfs:label ?label. }
WHERE       { ?p rdfs:isDefinedBy ?x1. ?p rdfs:label ?label. }
', ?ont)
]


# example for gnowsis. note the use of "....{ graph ?g { ...."
[test:
(http://xmlns.com/foaf/0.1/ ?x ?type)
-> querySparql('
CONSTRUCT   { ?x1 rdfs:label ?label }
WHERE       { graph ?g {  ?x1 rdfs:label ?label. FILTER (?x1 = foaf:name) } }
')
]
QR barcode by i-nigma.com/CreateBarcodes

Friday, 11. January 2008

Chuck norris kennt alle stellen von pi

QR barcode by i-nigma.com/CreateBarcodes
Matthew (guest) - 15. Jan, 11:29

... und er hat bis unendlich gezählt. zwei mal!

fenny - 29. Nov, 15:57

Full of professional insight based on testing by experts that knew what they were talking about! It's a very great article ! thanks !
press release writers
essay help

alton100 - 28. Jan, 10:05

I used to be more than happy to seek out this internet-site.I wanted to thanks in your time for this glorious read!! I positively enjoying each little bit of it and I have you bookmarked to check out new stuff you weblog post
spiked leather jacket ::::: womans winter coats ::::: fashion winter coats ::::: boys winter coats on sale ::::: mens winter coats sale ::::: ladies winter coats 2010 ::::: ladies winter coats 2012 ::::: ladies long winter coats :::::

alinsmith - 13. Feb, 13:33

I bumped into your post. I don't usually post in blogs but your blog forced me to. Awesome work! Thank you for sharing! black">http://www.myblackdiamonds.com/40065/Black-Diamond-Strands.html">black diamond necklaces

thomasfernandus - 22. Mar, 16:40

good job

OMG!! very nice and i like the way you express everything. I hope every reader take advantage of this useful info. Thanks, great share
Blog commenting services uk

authority216 - 27. Mar, 13:22

Great

Chuck Norris can do everything man - from canvas art prints of your face to his momma's elbow!

enthusiast225 - 28. Mar, 16:48

Haha

Watch your mouth boy me and flower canvas print will take out Chuck Norris anyday!

rsweeting123 - 29. Mar, 10:50

No way!

Chuck Norris will put your flowery canvas prints in a very uncomfortable position, check out the Mohka canvas art prints if you wanna see some kick-ass art!

rsweeting123 - 29. Mar, 13:31

Game on

Chuck Norris is about as strong as my left banksy canvas I'll slap you all about town sunshine!

authority216 - 30. Mar, 12:08

Loser

Oh really well I don't think your banksy prints is that strong then is it!

Thursday, 10. January 2008

Artikel in "Entwickler Magazin" 2008.1

For the german audience, "Entwickler Magazin" hat in Ausgabe 2008.1 einen Artikel von mir über den Semantic Desktop veröffentlicht.

Cover "Entwickler" Ausgabe 2008.1

In vier Seiten wird dort erklärt, was die Grundlagen von Semantic Web und Semantic Desktop sind, und ein paar links auf Projekte gegeben.
Zu haben um € 6,50 im Zeitschriftenhandel in Deutschland/Österreich/Schweiz, eine der 20k Ausgaben können schon bald dein sein.

Einleitung:
Der Semantic Desktop macht den PC zum Denkwerkzeug. wink wink
Wir haben genug Platz, um all unsere E-Mails, MP3s, Photos, Videos und Dokumente am Desktop zu speichern. Das Problem ist, diese Information zu verwalten. Dateisysteme bieten nur starre Hierarchien an. Tim Berners-Lee und das W3C haben bereits weiter gedacht: Menschen denken in Konzepten, das Semantic Web bietet mit RDF und Ontologien einen auf HTTP, URIs und HTML aufbauenden Standard zur Annotation und Suche. Der Semantic Desktop bringt Betriebssysteme und Anwendungen damit weg von den Dateien, auf die Stufe der Gedanken.

Um dahin zu kommen, zuerst ein kleiner Crash-Kurs zum Thema Semantic Web,...
...
QR barcode by i-nigma.com/CreateBarcodes

Wednesday, 9. January 2008

Dataportability.org brings together google, plaxo, and facebook

A storm-in-a-waterglass gathering more and more momentum, dataportability.org welcomes new members. Before they were heating up the storm, now individual corporate representatives of Scoble, Plaxo, and Facebook, are sitting on one virtual table.

As announced here, blogged here, and then slashdotted, people working for some interesting ventures have today joined dataportability.org.

In the last weeks, for those who missed the event that Robert Scoble used an un-released app "pulse" from plaxo to gather his contacts from facebook and got blocked by facebook after this. He contacted them and after a while, was back in, but the problem is obvious: social websites, and the companies running them, have one capital on their stock: data created by us. As "we" were "man of the year" in Time, the data of such a celebrity is worth a lot.

Scoble joined dataportability.org (DP) and blogged this, which made me curious to also look at their site and add a few notes about how RDF and Semantic Web may help them out instead of creating their own standards.
Now that people working for Plaxo, Google, and Facebook join the already impressive list of individuals at dataportability, they can really talk about the mission
To put all existing technologies and initiatives in context to create a reference design for end-to-end Data Portability. To promote that design to the developer, vendor and end-user community.

My biggest fear was, that the standards created by DP were used-less as no big companies were present in their board (not like W3C, where nearly all big companies are onboard). This has changed now and I would expect that the effort indeed now is relevant to the future of the web.
QR barcode by i-nigma.com/CreateBarcodes

Tuesday, 8. January 2008

The Semantic Web for n00bs

An introductionary talk about the Semantic Web:



show it to your significant other to explain why you stare at the screen all day.
QR barcode by i-nigma.com/CreateBarcodes
icon

semantic weltbild 2.0

Building the Semantic Web is easier together

and then...

foaf explorer
foaf

Geo Visitors Map
I am a hard bloggin' scientist. Read the Manifesto.
www.flickr.com
lebard's photos More of lebard's photos
Skype Me™!

Search

 

Users Status

You are not logged in.

I support

Wikipedia Affiliate Button

Archive

September 2025
Sun
Mon
Tue
Wed
Thu
Fri
Sat
 
 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 
 
 
 
 
 
 

Credits


austriaca
Chucknorrism
digitalcouch
gnowsis
Jesus
NeueHeimat
route planning
SemWeb
travel
zoot
Profil
Logout
Subscribe Weblog