/** * Append RDF metadata. */ public function appendMetadata($item, $metadataElement) { $document = $metadataElement->ownerDocument; $rdf = $document->createElementNS(self::METADATA_NAMESPACE, 'rdf:RDF'); $metadataElement->appendChild($rdf); $rdf->setAttribute('xmlns:dc', self::DC_NAMESPACE_URI); $rdf->setAttribute('xmlns:dcterms', self::DCTERMS_NAMESPACE_URI); $rdf->declareSchemaLocation(self::METADATA_NAMESPACE, self::METADATA_SCHEMA); $description = $rdf->appendNewElement('rdf:Description'); $oaiId = OaiPmhRepository_OaiIdentifier::itemToOaiId($item->id); $description->setAttribute('rdf:about', $oaiId); $dcExtendedElements = array('Title' => 'dc:title', 'Creator' => 'dc:creator', 'Subject' => 'dc:subject', 'Description' => 'dc:description', 'Publisher' => 'dc:publisher', 'Contributor' => 'dc:contributor', 'Date' => 'dc:date', 'Type' => 'dc:type', 'Format' => 'dc:format', 'Identifier' => 'dc:identifier', 'Source' => 'dc:source', 'Language' => 'dc:language', 'Relation' => 'dc:relation', 'Coverage' => 'dc:coverage', 'Rights' => 'dc:rights', 'Abstract' => 'dcterms:abstract', 'Access Rights' => 'dcterms:accessRights', 'Accrual Method' => 'dcterms:accrualMethod', 'Accrual Periodicity' => 'dcterms:accrualPeriodicity', 'Accrual Policy' => 'dcterms:accrualPolicy', 'Alternative Title' => 'dcterms:alternative', 'Audience' => 'dcterms:audience', 'Date Available' => 'dcterms:available', 'Bibliographic Citation' => 'dcterms:bibliographicCitation', 'Conforms To' => 'dcterms:conformsTo', 'Date Created' => 'dcterms:created', 'Date Accepted' => 'dcterms:dateAccepted', 'Date Copyrighted' => 'dcterms:dateCopyrighted', 'Date Submitted' => 'dcterms:dateSubmitted', 'Audience Education Level' => 'dcterms:educationLevel', 'Extent' => 'dcterms:extent', 'Has Format' => 'dcterms:hasFormat', 'Has Part' => 'dcterms:hasPart', 'Has Version' => 'dcterms:hasVersion', 'Instructional Method' => 'dcterms:instructionalMethod', 'Is Format Of' => 'dcterms:isFormatOf', 'Is Part Of' => 'dcterms:isPartOf', 'Is Referenced By' => 'dcterms:isReferencedBy', 'Is Replaced By' => 'dcterms:isReplacedBy', 'Is Required By' => 'dcterms:isRequiredBy', 'Date Issued' => 'dcterms:issued', 'Is Version Of' => 'dcterms:isVersionOf', 'License' => 'dcterms:license', 'Mediator' => 'dcterms:mediator', 'Medium' => 'dcterms:medium', 'Date Modified' => 'dcterms:modified', 'Provenance' => 'dcterms:provenance', 'References' => 'dcterms:references', 'Replaces' => 'dcterms:replaces', 'Requires' => 'dcterms:requires', 'Rights Holder' => 'dcterms:rightsHolder', 'Spatial Coverage' => 'dcterms:spatial', 'Table Of Contents' => 'dcterms:tableOfContents', 'Temporal Coverage' => 'dcterms:temporal', 'Date Valid' => 'dcterms:valid'); $elementTexts = $item->getAllElementTexts(); $elements = $item->getElementsBySetName('Dublin Core'); foreach ($dcExtendedElements as $elementName => $propertyName) { try { $texts = $item->getElementTexts('Dublin Core', $elementName); } catch (Omeka_Record_Exception $e) { continue; } // Prepend the item type, if any. if ($elementName == 'Type' && get_option('oaipmh_repository_expose_item_type')) { if ($dcType = $item->getProperty('item_type_name')) { $description->appendNewElement('dc:type', $dcType); } } foreach ($texts as $text) { $description->appendNewElement($propertyName, $text->text); } } }
/** * Appends the record's header to the XML response. * * Adds the identifier, datestamp and setSpec to a header element, and * appends in to the document. * * @param DOMElement $parentElement */ public function appendHeader($parentElement) { $headerData['identifier'] = OaiPmhRepository_OaiIdentifier::itemToOaiId($this->item->id); $headerData['datestamp'] = OaiPmhRepository_Date::dbToUtc($this->item->modified); $collectionId = $this->item->collection_id; if ($collectionId) { $headerData['setSpec'] = $collectionId; } $this->createElementWithChildren($parentElement, 'header', $headerData); }
/** * Responds to the ListMetadataFormats verb. * * Outputs records for all of the items in the database in the specified * metadata format. * * @todo extend for additional metadata formats */ private function listMetadataFormats() { $identifier = $this->_getParam('identifier'); /* Items are not used for lookup, simply checks for an invalid id */ if ($identifier) { $itemId = OaiPmhRepository_OaiIdentifier::oaiIdToItem($identifier); if (!$itemId) { $this->throwError(self::OAI_ERR_ID_DOES_NOT_EXIST); return; } } if (!$this->error) { $listMetadataFormats = $this->document->createElement('ListMetadataFormats'); $this->document->documentElement->appendChild($listMetadataFormats); foreach ($this->metadataFormats as $format) { $formatObject = new $format(null, $this->document); $formatObject->declareMetadataFormat($listMetadataFormats); } } }
public static function initializeNamespace($namespaceId) { self::$namespaceId = $namespaceId; }
/** * Appends CDWALite metadata. * * Appends a metadata element, an child element with the required format, * and further children for each of the Dublin Core fields present in the * item. */ public function appendMetadata($item, $metadataElement) { $document = $metadataElement->ownerDocument; $cdwaliteWrap = $document->createElementNS(self::METADATA_NAMESPACE, 'cdwalite:cdwaliteWrap'); $metadataElement->appendChild($cdwaliteWrap); $cdwaliteWrap->setAttribute('xmlns:cdwalite', self::METADATA_NAMESPACE); $cdwaliteWrap->declareSchemaLocation(self::METADATA_NAMESPACE, self::METADATA_SCHEMA); $cdwalite = $cdwaliteWrap->appendNewElement('cdwalite:cdwalite'); /* ==================== * DESCRIPTIVE METADATA * ==================== */ $descriptive = $cdwalite->appendNewElement('cdwalite:descriptiveMetadata'); /* Type => objectWorkTypeWrap->objectWorkType * Required. Fill with 'Unknown' if omitted. */ $objectWorkTypeWrap = $descriptive->appendNewElement('cdwalite:objectWorkTypeWrap'); if (get_option('oaipmh_repository_expose_item_type') && ($dcType = $item->getProperty('item_type_name'))) { $objectWorkTypeWrap->appendNewElement('cdwalite:objectWorkTypeWrap', $dcType); } $types = $item->getElementTexts('Dublin Core', 'Type'); //print_r($objectWorkTypeWrap); if (empty($dcType) && count($types) == 0) { $types[] = 'Unknown'; } foreach ($types as $type) { $objectWorkTypeWrap->appendNewElement('cdwalite:objectWorkTypeWrap', $type == 'Unknown' ? $type : $type->text); } /* Title => titleWrap->titleSet->title * Required. Fill with 'Unknown' if omitted. */ $titles = $item->getElementTexts('Dublin Core', 'Title'); $titleWrap = $descriptive->appendNewElement('cdwalite:titleWrap'); if (count($types) == 0) { $types[] = 'Unknown'; } foreach ($titles as $title) { $titleSet = $titleWrap->appendNewElement('cdwalite:titleSet'); $titleSet->appendNewElement('cdwalite:title', $title->text); } /* Creator => displayCreator * Required. Fill with 'Unknown' if omitted. * Non-repeatable, implode for inclusion of many creators. */ $creators = $item->getElementTexts('Dublin Core', 'Creator'); $creatorTexts = array(); foreach ($creators as $creator) { $creatorTexts[] = $creator->text; } if (count($creatorTexts) == 0) { $creatorTexts[] = 'Unknown'; } $creatorText = implode(', ', $creatorTexts); $descriptive->appendNewElement('cdwalite:displayCreator', $creatorText); /* Creator => indexingCreatorWrap->indexingCreatorSet->nameCreatorSet->nameCreator * Required. Fill with 'Unknown' if omitted. * Also include roleCreator, fill with 'Unknown', required. */ $indexingCreatorWrap = $descriptive->appendNewElement('cdwalite:indexingCreatorWrap'); foreach ($creatorTexts as $creator) { $indexingCreatorSet = $indexingCreatorWrap->appendNewElement('cdwalite:indexingCreatorSet'); $nameCreatorSet = $indexingCreatorSet->appendNewElement('cdwalite:nameCreatorSet'); $nameCreatorSet->appendNewElement('cdwalite:nameCreator', $creator); $indexingCreatorSet->appendNewElement('cdwalite:roleCreator', 'Unknown'); } /* displayMaterialsTech * Required. No corresponding metadata, fill with 'not applicable'. */ $descriptive->appendNewElement('cdwalite:displayMaterialsTech', 'not applicable'); /* Date => displayCreationDate * Required. Fill with 'Unknown' if omitted. * Non-repeatable, include only first date. */ $dates = $item->getElementTexts('Dublin Core', 'Date'); $dateText = count($dates) > 0 ? $dates[0]->text : 'Unknown'; $descriptive->appendNewElement('cdwalite:displayCreationDate', $dateText); /* Date => indexingDatesWrap->indexingDatesSet * Map to both earliest and latest date * Required. Fill with 'Unknown' if omitted. */ $indexingDatesWrap = $descriptive->appendNewElement('cdwalite:indexingDatesWrap'); foreach ($dates as $date) { $indexingDatesSet = $indexingDatesWrap->appendNewElement('cdwalite:indexingDatesSet'); $indexingDatesSet->appendNewElement('cdwalite:earliestDate', $date->text); $indexingDatesSet->appendNewElement('cdwalite:latestDate', $date->text); } /* locationWrap->locationSet->locationName * Required. No corresponding metadata, fill with 'location unknown'. */ $locationWrap = $descriptive->appendNewElement('cdwalite:locationWrap'); $locationSet = $locationWrap->appendNewElement('cdwalite:locationSet'); $locationSet->appendNewElement('cdwalite:locationName', 'location unknown'); /* Subject => classWrap->classification * Not required. */ $subjects = $item->getElementTexts('Dublin Core', 'Subject'); $classWrap = $descriptive->appendNewElement('cdwalite:classWrap'); foreach ($subjects as $subject) { $classWrap->appendNewElement('cdwalite:classification', $subject->text); } /* Description => descriptiveNoteWrap->descriptiveNoteSet->descriptiveNote * Not required. */ $descriptions = $item->getElementTexts('Dublin Core', 'Description'); if (count($descriptions) > 0) { $descriptiveNoteWrap = $descriptive->appendNewElement('cdwalite:descriptiveNoteWrap'); foreach ($descriptions as $description) { $descriptiveNoteSet = $descriptiveNoteWrap->appendNewElement('cdwalite:descriptiveNoteSet'); $descriptiveNoteSet->appendNewElement('cdwalite:descriptiveNote', $description->text); } } /* ======================= * ADMINISTRATIVE METADATA * ======================= */ $administrative = $cdwalite->appendNewElement('cdwalite:administrativeMetadata'); /* Rights => rightsWork * Not required. */ $rights = $item->getElementTexts('Dublin Core', 'Rights'); foreach ($rights as $right) { $administrative->appendNewElement('cdwalite:rightsWork', $right->text); } /* id => recordWrap->recordID * 'item' => recordWrap-recordType * Required. */ $recordWrap = $administrative->appendNewElement('cdwalite:recordWrap'); $recordWrap->appendNewElement('cdwalite:recordID', $item->id); $recordWrap->appendNewElement('cdwalite:recordType', 'item'); $recordInfoWrap = $recordWrap->appendNewElement('cdwalite:recordInfoWrap'); $recordInfoID = $recordInfoWrap->appendNewElement('cdwalite:recordInfoID', OaiPmhRepository_OaiIdentifier::itemToOaiId($item->id)); $recordInfoID->setAttribute('cdwalite:type', 'oai'); /* file link => resourceWrap->resourceSet->linkResource * Not required. */ if (get_option('oaipmh_repository_expose_files')) { $files = $item->getFiles(); if (count($files) > 0) { $resourceWrap = $administrative->appendNewElement('cdwalite:resourceWrap'); foreach ($files as $file) { $resourceSet = $resourceWrap->appendNewElement('cdwalite:resourceSet'); $resourceSet->appendNewElement('cdwalite:linkResource', $file->getWebPath('original')); } } } }
/** * Appends the record's header to the XML response. * * Adds the identifier, datestamp and setSpec to a header element, and * appends in to the document. * * @param DOMElement $parentElement * @param Item $item */ public function appendHeader($parentElement, $item) { $headerData['identifier'] = OaiPmhRepository_OaiIdentifier::itemToOaiId($item->id); $headerData['datestamp'] = OaiPmhRepository_Date::dbToUtc($item->modified); $collection = $item->getCollection(); if ($collection && $collection->public) { $headerData['setSpec'] = $collection->id; } $parentElement->appendNewElementWithChildren('header', $headerData); }