[foaf-dev] RDF specgen revisited - help needed!

Dan Brickley danbri at danbri.org
Thu Dec 11 15:49:18 CET 2008

Hi folks

I'm looking for some Python-hacking help, to get a new FOAF spec out.

Some of you might know about specgen. I've long used a version of this 
script to re-generate the FOAF spec from sources. Originally in Ruby, 
Uldis Bojars and Chris Schmidt made a Python version and disentangled it 
from the specifics of the FOAF spec/site. Their specgen4.py, as well as 
the earlier specgen.py the last FOAF spec was built from, both require 
the compilation of Redland plus the Python bindings. Although Redland is 
a solid, powerful and mature library, it can be tough to get the Python 
bindings set up. Lately I've failed to manage this either on my Mac 
laptop or under Linux at Dreamhost. Redland is overkill for this task. 
I'd like to be able to rev the FOAF spec with far fewer dependencies.

So I've begun exploring a rewrite of specgen. My first attempt (now 
abandoned as specgen4b.py) was to simply go through and replace calls to 
Redland with similar calls to the librdf library. I found this rather 
error prone, since the RDF logic is tangled up with page-generation code.

Despite my ignorance of Python and rdflib, I'm attempting a fresh start. 
The idea is to have a few core utility classes, Vocab, Term (Class, 
Property) and populate these - as before - from on disk RDF and HTML 
descriptions of an RDF vocabulary.

Everything I have so far is at http://svn.foaf-project.org/foaftown/specgen/

The RDFS/OWL-loader and utility code is in libvocab.py. This does 
nothing fancy; certainly no RDFS or OWL reasoning.

# Test FOAF spec
spec = Vocab( 'examples/foaf/index.rdf' )
spec.uri = 'http://xmlns.com/foaf.0.1/'
spec.index() # slurp info from sources

# spec.raw()
# print spec.report().encode('UTF-8')

for p in spec.properties:
   print "Got a property: " + p
   print p.simple_report().encode('UTF-8')
for c in spec.classes:
   print "Got a class: " + c
   print c.simple_report().encode('UTF-8')

...sample outout:

Got a class: Group
default: 		Group
id:      		Group
uri:     		http://xmlns.com/foaf/0.1/Group
xmlns:   		http://xmlns.com/foaf/0.1/
label:   		Group
comment: 		A class of Agents.

Is anyone interested in helping take this further? The existing 
Redland-based specgen code is useful, but the dependency on configuring 
Redland plus Python bindings is pretty heavy. Librdf (eg. see 
http://www.science.uva.nl/research/air/wiki/RDFlib) seems to contain a 
reasonable SPARQL implementation, and there's an RDFa parser around too 
somewhere I'm sure. The current code at 
http://svn.foaf-project.org/foaftown/specgen/ doesn't quite load up 
enough information for the HTML-generation side of specgen to be 
implemented. I'd love to find a more Python-aware collaborator or two to 
help get this moving. Failing that, I need to get Redland+Python running 
again so I can make a new FOAF spec :)

Thanks for any thoughts or help,



ps. if it isn't clear from the code, I've never written anything in 
Python before! Am taking a 'pretend it is Ruby then google when stuff 
breaks' approach...


More information about the foaf-dev mailing list