URI namespace lookup with prefix.cc and RDF::NS

3. November 2011 um 17:13 Keine Kommentare

Probably the best feature of RDF is that it forces you to use Uniform Resource Identifiers (URI) instead of private, local identifiers which only make sense in a some context. URIs are long and cumbersome to type, so popular URIs are abbreviated with namespaces prefixes. For instance foaf:Person is expanded to http://xmlns.com/foaf/0.1/Person, once you have defined prefix foaf for namespace http://xmlns.com/foaf/0.1/. In theory URI prefixes in RDF are arbitrary (in contrast to XML where prefixes can matter, in contrast to popular belief). In practice people prefer to agree to one or two known prefixes for common URI namespaces (unless they want to obfuscate human readers of RDF data).

So URI prefixes and namespaces and are vital for handling RDF. However, you still have to define them in almost every file and application. In the end people have copy & paste the same prefix definitions again and again. Fortunately Richard Cyganiak created a registry of popular URI namespaces, called prefix.cc (it’s open source), so people at least know where to copy & paste from. I had enough of copying the same URI prefixes from prefix.cc over and over again, so I created a Perl module that includes snapshots of the prefix.cc database. It includes a simple command line client, that is installed automatically:

  $ sudo cpanm RDF::NS
  $ rdfns rdf,foaf.ttl
  @prefix foaf: <http: //xmlns.com/foaf/0.1/> .
  @prefix rdf: <http: //www.w3.org/1999/02/22-rdf-syntax-ns#> .

In your Perl code, you can use it like this:

  use RDF::NS
  my $NS = RDF::NS->new('20111102');
  $NS->foaf_Person; # returns "http://xmlns.com/foaf/0.1/Person"

If you miss an URI prefix, just add it at http://prefix.cc, and will be included in the next release.

Query parts in Linked Data URIs considered harmful

29. Mai 2011 um 01:40 Keine Kommentare

The generic syntax of URI (and of IRI with slightly different definition of the elements) is:

<scheme name> : <hierarchical part> [ ? <query> ] [ # <fragment> ]

RDF is based on „URI references“ which have a different syntax, but all practical RDF data should follow the generic URI syntax. This is also implied by the Linked Data Principles which encourage you to use HTTP URIs. Furthermore it is a good advice not to include fragments in your URIs if you care about coexistence of the Web and the Semantic Web. Yes, there is RDF data with fragment parts and the so called Hash URIs are even given as one design pattern, but you can avoid a lot of trouble if you use URIs without them. By the way, fragment identifiers are also used a lot in JavaScript-based web applications that spoil the whole concept of REST as described in this recent in-depth article on Hash URIs.

I would even go further and say that well-designed URIs for Linked Data should also forgo the query part. A clean URI to be used as identifier in Linked Data should stick to this limited generic syntax:

http: <hierarchical part>

I do not argue to disallow URIs with query part, but I wonder how much they are really used and needed for resources other than Web resources. Especially URIs for non-information resources, should not have a query part. Most web applications will not distinguish between these two:

http://example.org?foo=1&bar=2
http://example.org?bar=2&foo=1

These are different URIs but equivalent URLs. Choosing URIs that are not equivalent to other URIs in common non-RDF applications is a good advice, isn’t it? If you choose a cleaner URI like http://example.org/foobar you could use additional query parts to refer to different representations (information resources) and services around the resource that is referenced by the base URI.

Pseudo-URIs als Identifikatoren für Normdaten der Deutschen Nationalbibliothek

7. April 2008 um 03:31 7 Kommentare

Die Deutsche Nationalbibliothek (DNB) hat anscheinend Ende März eine neue Katalog-Oberfläche online gestellt – der alte OPAC ist auch noch verfügbar. Dabei sind unter Anderem die Normdaten (SWD, GKD, PND) teilweise besser integriert. Ich warte ja schon seit einiger Zeit darauf, dass endlich richtige URIs vergeben werden, so dass sich Normdaten global referenzieren lassen. Bei der aktuellen Lösung ist aber leider einiges schiefgelaufen.

Was ist eine URI?
Die Diskussion zum Thema URI/URN/URL auf Inetbib hat mal wieder gezeigt, dass es beim Thema Identifikatoren oft Missverständnisse gibt. Die international allgemeine Form globaler Identifikatoren ist der „Uniform Resource Identifier“ (URI) bzw. die Erweiterung „Internationalized Resource Identifier“ (IRI). Sie sind in RFC 3986 und RFC 3987 standardisiert. Die Vergabe von UR regelt RFC 4395. Verschiedene URI-Schemata (gekennzeichnet durch den Teil einer URI bis zum ersten Doppelpunkt) sind jeweils mit einem eigenen Standard registriert und definiert, zum Beispiel URNs durch RFC 2141.

Viele URI-Schemata legen Namensräume und eigene Regeln zur Struktur und Vergabe von Identifikatoren fest. So zum Beispiel RFC 3406 für URNs und RFC 3044 für den URN-Namensraum urn:issn zur Abbildung von ISSNs. Durch die Formulierung von ISSNs als URI können diese bereits etablierten aber nur begrenzt nutzbaren Identifikatoren auch global genutzt werden, beispielsweise im Rahmen des Semantic Web. Während die Zeichenfolge „0024-9319“ sehr unterschiedliches identifizieren kann, weist „urn:issn:0024-9319“ eindeutig auf die amerikanische Ausgabe des MAD-Magazins hin.

Um welche Identifikatoren geht es?
Zur Identifikation von Personen (PND), Begriffen (SWD) und Körperschaften (GKD) gibt es im deutschen Bibliothekssystem seit vielen Jahren etablierte Normdaten. Abgesehen von wenigen Ausnahmen fristen diese Normdaten bzw. ihre Identifikatoren jedoch eher ein Schattendasein. Andere Identifikatoren, wie beispielsweise die Nummern von OCLC und der Library of Congress werden dagegen auch zunehmend von den „global players“ im Netz verwendet (von Google und LibrayThing). Wenn sie endlich mit URIs versehen und frei veröffentlicht würden, könnten die deutschen Normdateien ebenfalls weitere Verbreitung finden – oder andernfalls an Bedeutung verlieren.

Was hat die DNB falsch gemacht?
Anscheinend ist nun bei der Erstellung von Identifikatoren für Normdaten bei der Deutschen Nationalbibliothek gleich an mehreren Stellen etwas schief gelaufen. Dabei sieht es auf den ersten Blick ganz gut aus: Beim SWD-Eintrag „Poetry Slam“ ist beispielsweise dort als „Id“ die Zeichenkette „info://d-nb.de/965692973“ angegeben:

Ist das eine URI? Nein. In der offiziellen Liste von URI-Schemata ist „info:“ als gültiges URI-Schema eingetragen, das durch RFC 4452 definiert wird. Die dort festgelegte Maintenance Authority NISO hat die Verwaltung von Namensräumen an OCLC weitergegeben. Nun bekleckert sich OCLC mit dem seit Wochen nicht erreichbaren Verzeichnis der vergebenen Unternamensräume auch nicht gerade mit Ruhm, aber immerhin gibt es klare Standards (mehr Informationen bei der LOC). Eine info-URI ist aufgebaut nach dem Schema „info:NAMENSRAUM/LOKALTEIL„. Die Zeichenkette „info://d-nb.de/965692973“ kann also schon formal keine URI sein. Außerdem ist „d-nb.de“ nicht als gültiger info-URI Namensraum registriert. Zu allem Ãœberfluss wird nicht auf die etablierten SWD-Nummern zurückgegriffen (die SWD-Nummer für den SWD-Datensatz ist „4709615-9“), sondern als lokaler Bestandteil die nicht standardisierte, systemabhängige PND-Nummer (hier: 965692973) verwendet!

Wie lässt sich der Schlamassel beheben?
Leider ist dies nicht das erste mal, dass sich die DNB im Internet lächerlich macht. Zum Glück lassen sich die Fehler relativ einfach beheben.

1. Die bereits existierenden „Standards“ für die existierenden Normdaten-Nummern werden explizit und verlässlich festgeschrieben, d.h. erlaubte Zeichen und Wertebereiche, Berechnung der Prüfziffer und Normalisierung (siehe LCCN-Normalisierung).

2. Die DNB reserviert für die Normdaten-Nummern einen URI-Namensraum (beispielsweise info:swd, info:pnd, info:gkd). Dabei sind die Regeln zur Syntax und Vergabe von URI-Schemata und Namensräumen einzuhalten. Internationale Standards sind zum Lesen und Einhalten da und nicht zum Ignorieren und Uminterpretieren.

3. Die URIs werden verständlich dokumentiert und propagiert. Die Kür wäre eine völlige Freigabe der Normdaten als öffentlicher Datenbank-Abzug unter einer freien Lizenz.

Zur Klärung der Konfusion bezüglich URI und URL sei auf die Artikel URIs, URLs, and URNs: Clarifications and Recommendations (via Kay Heiligenhaus) und On Linking Alternative Representations To Enable Discovery And Publishing hingewiesen.

P.S: Eine bibliotheksrelevante Anwendung von von Identifikatoren für Personen wurde letzte Woche von Arjan Hogenaar and Wilko Steinhoff im Vortrag Towards a Dutch Academic Information Domain auf der Open Repositories 2008 vorgestellt.