Heute Abend wollte ich schnell ein kleines Script schreiben, dass mir für ein institutionelles Repositorium eine Liste aller Sets ausgibt. Das ist grundsätzlich nicht schwer, denn die Mehrzahl der Institutionellen Repositoiren verwendet OAI-PMH (Open Archives Initiatives Public Metadata Harvesting) und somit ist der Zugriff auf die Daten gut dokumentiert. Für die Library of Congress in den Vereinigten Staaten findet man diese Liste hinter dem üblichen Verb=ListSets und bekommt so eine XML Datei ausgegeben.
Wer diese Datei jedoch mit SimpleXML in PHP einliest, stösst dank der verwendeten Namensräume (Namespaces) schnell an eine kleine Mauer. Diese Mauer gilt es zu durchbrechen, was zum Glück nicht so schrecklich schwer ist.
Hier ein Teil der XML Datei:
<setDescription> <oai_dc:dc xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd"> <dc:title xml:lang="en">...</dc:title> <dc:creator>Library of Congress</dc:creator><br>
Die Daten an die ich ran möchte sind also in im Namespace dc: (für Dublin Core). Wie kommt man da nun am besten ran?
Zu erst muss man sich die URI (Uniform Resource Identifier) für den jeweiligen Namespace raussuchen. Das ist zum Glück ganz einfach, denn gültiges XML gibt diesen immer an. Der Name Space oai_dc wird unter http://www.openarchives.org/OAI/2.0/oai_dc/ beschrieben, der Name Space dc unter http://purl.org/dc/elements/1.1/. Für den nächsten Schritt benötig man nun also nur noch die SimpleXMLElement Methode children. Oder genau gesagt:
$ns_dc = $setDescription->children('http://www.openarchives.org/OAI/2.0/oai_dc/')->children('http://purl.org/dc/elements/1.1/');
Dann hat man in der Variable $ns_dc ein Array mit allen „Elementen“ des gewünschten Namensraums und kann diese ganz nun ganz normal erreichen.
0 Kommentare