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.