My FOAF network #3: My publications
As promised, I’ll write a bit about using Bibliographic Ontology Specification (BIBO) over as bibliontology.com. I have written a basic XSLT to create a HTML GUI (open the RDF source in e.g. Firefox). Really basic: it only converts articles, and even assumes some conventions I found in examples in the BIBO wiki. I have not spotted a BIBO validator yet, so guessing a bit. The BibTeX mapping examples are under discussion, but provide some insight to those who are used to using that (JabRef users, for example).
So, if I understood the specs enough, the following should be valid BIBO (at least it is valid RDF):
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl"
href="http://blueobelisk.sourceforge.net/people/egonw/bibo2xhtml.xsl"
?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:bibo="http://purl.org/ontology/biblio/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:dcterms="http://purl.org/dc/terms/"
xmlns:foaf="http://xmlns.com/foaf/0.1/"
>
<bibo:Journal rdf:about="urn:issn:1471-2105">
<dc:title>BMC Bioinformatics</dc:title>
</bibo:Journal>
<bibo:Article rdf:about="http://dx.doi.org/10.1186/1471-2105-8-59">
<dc:title>Bioclipse: an open source workbench for chemo- and bioinformatics</dc:title>
<dc:date>2007-02-22</dc:date>
<dc:isPartOf rdf:resource="urn:issn:1471-2105"/>
<bibo:volume>8</bibo:volume>
<bibo:doi>10.1186/1471-2105-8-59</bibo:doi>
<bibo:contribution>
<bibo:Contribution>
<bibo:role rdf:resource="http://purl.org/ontology/bibo/roles/author" />
<bibo:contributor><foaf:Person foaf:name="Ola Spjuth"/></bibo:contributor>
<bibo:position>1</bibo:position>
</bibo:Contribution>
</bibo:contribution>
<bibo:contribution>
<bibo:Contribution>
<bibo:role rdf:resource="http://purl.org/ontology/bibo/roles/author" />
<bibo:contributor><foaf:Person foaf:name="Tobias Helmus"/></bibo:contributor>
<bibo:position>2</bibo:position>
</bibo:Contribution>
</bibo:contribution>
<bibo:contribution>
<bibo:Contribution>
<bibo:role rdf:resource="http://purl.org/ontology/bibo/roles/author" />
<bibo:contributor><foaf:Person foaf:name="Egon Willighagen"/></bibo:contributor>
<bibo:position>3</bibo:position>
</bibo:Contribution>
</bibo:contribution>
<bibo:contribution>
<bibo:Contribution>
<bibo:role rdf:resource="http://purl.org/ontology/bibo/roles/author" />
<bibo:contributor><foaf:Person foaf:name="Stefan Kuhn"/></bibo:contributor>
<bibo:position>4</bibo:position>
</bibo:Contribution>
</bibo:contribution>
<bibo:contribution>
<bibo:Contribution>
<bibo:role rdf:resource="http://purl.org/ontology/bibo/roles/author" />
<bibo:contributor><foaf:Person foaf:name="Martin Eklund"/></bibo:contributor>
<bibo:position>5</bibo:position>
</bibo:Contribution>
</bibo:contribution>
<bibo:contribution>
<bibo:Contribution>
<bibo:role rdf:resource="http://purl.org/ontology/bibo/roles/author" />
<bibo:contributor><foaf:Person foaf:name="Johannes Wagener"/></bibo:contributor>
<bibo:position>6</bibo:position>
</bibo:Contribution>
</bibo:contribution>
<bibo:contribution>
<bibo:Contribution>
<bibo:role rdf:resource="http://purl.org/ontology/bibo/roles/author" />
<bibo:contributor><foaf:Person foaf:name="Peter Murray-Rust"/></bibo:contributor>
<bibo:position>7</bibo:position>
</bibo:Contribution>
</bibo:contribution>
<bibo:contribution>
<bibo:Contribution>
<bibo:role rdf:resource="http://purl.org/ontology/bibo/roles/author" />
<bibo:contributor><foaf:Person foaf:name="Christoph Steinbeck"/></bibo:contributor>
<bibo:position>8</bibo:position>
</bibo:Contribution>
</bibo:contribution>
<bibo:contribution>
<bibo:Contribution>
<bibo:role rdf:resource="http://purl.org/ontology/bibo/roles/author" />
<bibo:contributor><foaf:Person foaf:name="Jarl Wikberg"/></bibo:contributor>
<bibo:position>9</bibo:position>
</bibo:Contribution>
</bibo:contribution>
</bibo:Article>
</rdf:RDF>
There are some things notable about this markup:
- It is very verbose, even for XML standards!
- It’s RDF from the ground up
- it reuses many other ontologies
Particularly, the authors section is very verbose. However, it also nicely reuses FOAF here. This makes it really powerful. For example, I could have used this bit:
<bibo:contribution>
<bibo:Contribution>
<bibo:role rdf:resource="http://purl.org/ontology/bibo/roles/author" />
<bibo:contributor rdf:resource="http://blueobelisk.sourceforge.net/people/egonw/foaf.xml#me"/>
<bibo:position>3</bibo:position>
</bibo:Contribution>
</bibo:contribution>
This would semantically link this publication to whatever information I have on myself published in my FOAF file.
Now, the reason why I have not done this yet, is that the XSLT did not properly load the XML from my foaf file:
<xsl:variable name="foafURI" select="substring-before(bibo:contributor/@rdf:resource, '#')"/>
<xsl:variable name="authorID" select="substring-after(bibo:contributor/@rdf:resource, '#')"/>
<xsl:variable name="foafDoc" select="document($foafURI)"/>
<xsl:value-of select="$foafDoc//foaf:Person[@rdf:ID=$authorID]"/>
The XSLT processor xsltproc (version 1.1.22 on Ubuntu 8.04) gives this error:
warning: failed to load external entity "http://blueobelisk.sourceforge.net/people/egonw/foaf.xml"
.
But, if I make it a relative, it does work. Both with xsltproc as well as with Firefox online.
Another reason not to do it like that, is that one looses control of the citation content. What I will do soon, is use this set up, making researcherid.com obsolete (see also these three blogs):
<bibo:contributor>
<foaf:Person foaf:name="Egon Willighagen">
<rdfs:seeAlso rdf:resource="http://blueobelisk.sourceforge.net/people/egonw/biblio.xml#me"/>
</foaf:Person>
</bibo:contributor>
Just in case you are wondering, “why the ### does he not simply use BibTeX?”, the answer is RDF. No RDF, no SPARQL, no GLORY. Just thing how easy it will become to run a queries like:
- which of those I have published with, run a blog
- which of those I have published with are going to that conference in Boston in September?
- which of those I have published with have friends who published about topics around these keywords
- etc…
All that becomes very easy now.
BTW, this is how I link to my bibliography from my FOAF:
<foaf:publications rdf:resource="http://blueobelisk.sourceforge.net/people/egonw/biblio.xml"/>