Det blir mycket RDF i lagen.nu 1.5. Och det blir mycket användande av RDFLib. Efter att ha hittat finfina instruktioner om hur man får biblioteket – inklusive SPARQL-parser – att snurra under windows har jag gett mig på min pet peeve i n3-serialiseringskoden, nämligen dess ovana att definera egna anonyma namespaceprefix. Normalt serialiserar den nämligen n3-formatet något i stil med såhär:
@prefix _8: http://lagen.nu/. @prefix _9: http://lagen.nu/1962:700#. @prefix dct: http://dublincore.org/documents/dcmi-terms/. @prefix rinfo: http://rinfo.lagrummet.se/taxo/2007/09/rinfo/pub#. _8:NJA_2005_s_878 dct:identifier "NJA 2005 s. 878 (NJA 2005:95)"; rinfo:lagrum _9:K29P7; rinfo:rattsfallshanvisning _8:NJA_1996_s_63, _8:NJA_2000_s_421;
Men nu blir det det oändligt mycket mer läsbara:
@prefix dct: http://dublincore.org/documents/dcmi-terms/.
@prefix rinfo: http://rinfo.lagrummet.se/taxo/2007/09/rinfo/pub#.
<http://lagen.nu/NJA_2005_s_878> dct:identifier "NJA 2005 s. 878 (NJA 2005:95)";
rinfo:lagrum <http://lagen.nu/1962:700#K29P7>;
rinfo:rattsfallshanvisning <http://lagen.nu/NJA_1996_s_63>,
<http://lagen.nu/NJA_2000_s_421>;
Här är patchen:
C:\Users\staffan\tmp\rdflib-2.4.0\rdflib>diff -u syntax\NamespaceManager.py~ syntax\NamespaceManager.py
--- syntax\NamespaceManager.py~ 2007-04-04 22:05:32.000000000 +0200
+++ syntax\NamespaceManager.py 2008-06-14 21:36:32.606307200 +0200
@@ -59,8 +59,7 @@
namespace = URIRef(namespace)
prefix = self.store.prefix(namespace)
if prefix is None:
- prefix = "_%s" % len(list(self.store.namespaces()))
- self.bind(prefix, namespace)
+ raise Exception("Prefix for %s not bound" % namespace)
self.__cache[uri] = (prefix, namespace, name)
return self.__cache[uri]
Den som förstår RDFLib bättre kan säkert få till samma effekt utan att patcha källkoden genom att subklassa NamespaceManager och trycka in den i kedjan någonstans, men mina försök till det misslyckades.