An interactive Turtle shell


Wouldn't it be nice to have an interactive environment where you could quickly hack together an RDF model and then show it to your clients or colleagues in a more accessible format - such as a diagram?

I don't know if there's anything like that already, but the other day while polishing up the OntosPy library, I took a couple of hours of fun coding and put together a module that lets you do exactly that.

The idea is simple: load an interactive environment where you can quickly sketch out a few ideas using the (very readable) Turtle RDF format.

Then export it to a different representation (e.g., a graphical one) so that it can be shown to people. Or just to keep working on it via a medium that offers different affordances.

So here it is:

[michele.pasin]@here:~/code/python>sketch.py Good morning. Ready to Turtle away. Type docs() for help. In [1]: docs()

====Sketch v 0.2\====

add() ==> add statements to the graph ...........SHORTCUTS: ...........'class' = owl:Class ...........'sub' = rdfs:subClassOf ...........TURTLE SYNTAX: http://www.w3.org/TR/turtle/

show() ==> shows the graph. Can take an OPTIONAL argument for the format. ...........eg one of['xml', 'n3', 'turtle', 'nt', 'pretty-xml', dot']

clear() ==> clears the graph ...........all triples are removed

omnigraffle() ==> creates a dot file and opens it with omnigraffle ...........First you must set Omingraffle as your system default app for dot files!

quit() ==> exit

====Have fun!====

In [2]: add() Multi-line input. Enter ### when finished. :person a class :mike a :person :person sub :agent :organization sub :agent :worksIn rdfs:domain :person :worksIn rdfs:range :organization :mike :worksIn :DamageInc :DamageInc a :organization

In [3]: show() @prefix : <http://this.sketch#> . @prefix bibo: http://purl.org/ontology/bibo/ . @prefix foaf: http://xmlns.com/foaf/0.1/ . @prefix npg: http://ns.nature.com/terms/ . @prefix npgg: http://ns.nature.com/graphs/ . @prefix npgx: http://ns.nature.com/extensions/ . @prefix owl: <http://www.w3.org/2002/07/owl#> . @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . @prefix skos: <http://www.w3.org/2004/02/skos/core#> . @prefix xml: <http://www.w3.org/XML/1998/namespace> . @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

:mike a :person ; :worksIn :DamageInc .

:worksIn rdfs:domain :person ; rdfs:range :organization .

:DamageInc a :organization .

:organization rdfs:subClassOf :agent .

:person a owl:Class ; rdfs:subClassOf :agent .

In [4]: show("xml")

<rdf:RDF    xmlns\="http://this.sketch#"    xmlns:rdf\="http://www.w3.org/1999/02/22-rdf-syntax-ns#"    xmlns:rdfs\="http://www.w3.org/2000/01/rdf-schema#" > <rdf:Description rdf:about\="http://this.sketch#mike"> </rdf:Description> <rdf:Description rdf:about\="http://this.sketch#organization"> </rdf:Description> <rdf:Description rdf:about\="http://this.sketch#DamageInc"> </rdf:Description> <rdf:Description rdf:about\="http://this.sketch#person"> </rdf:Description> <rdf:Description rdf:about\="http://this.sketch#worksIn"> </rdf:Description> </rdf:RDF>

In [5]: omnigraffle()

saves a dot file and tries to open it with your default editor

if you're on a mac and have omnigraffle - that could be the one!

In [6]: quit()

If you are Mac-based and you have associated .dot files to the excellent Omnigraffle app, you'd see something like this:

Sketch Screen Shot 2014 10 12 at 10 12 48

Sketch Screen Shot 2014 10 12 at 10 13 32

This sped up my work quite a bit - especially in situations where you don't care about precision but are more interested in quickly demonstrating the merits of a modeling approach.

Any comments or ideas on how to develop this further? I'd love to hear your thoughts!

Cite this blog post:


Michele Pasin. An interactive Turtle shell. Blog post on www.michelepasin.org. Published on Oct. 12, 2014.

Comments via Github:


See also: