Exemplo n.º 1
0
Arquivo: Rdf.php Projeto: kyfr59/cg35
 /**
  * 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);
         }
     }
 }
Exemplo n.º 2
0
 /**
  * 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);
         }
     }
 }
Exemplo n.º 4
0
 public static function initializeNamespace($namespaceId)
 {
     self::$namespaceId = $namespaceId;
 }
Exemplo n.º 5
0
 /**
  * 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'));
             }
         }
     }
 }
Exemplo n.º 6
0
 /**
  * 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);
 }