Esempio n. 1
0
 /**
  * Map the source data to record properties
  */
 protected function map(array $document)
 {
     $json = new Json($document);
     $this->database_name = $json->extractValue('Header/DbLabel');
     $this->record_id = $json->extractValue('Header/DbId') . '-' . $json->extractValue('Header/An');
     $this->score = $json->extractValue('Header/RelevancyScore');
     // title
     $this->title = $json->extractValue('RecordInfo/BibRecord/BibEntity/Titles/0/TitleFull');
     $this->sub_title;
     // basic info
     $this->language = $json->extractValue("RecordInfo/BibRecord/BibEntity/Languages/0/Text");
     $this->extent = $json->extractValue("RecordInfo/BibRecord/BibEntity/PhysicalDescription/Pagination/PageCount");
     // date
     $this->year = (int) $json->extractValue('RecordInfo/BibRecord/BibRelationships/IsPartOfRelationships/0/BibEntity/Dates/0/Y');
     $this->month = (int) $json->extractValue('RecordInfo/BibRecord/BibRelationships/IsPartOfRelationships/0/BibEntity/Dates/0/M');
     $this->day = (int) $json->extractValue('RecordInfo/BibRecord/BibRelationships/IsPartOfRelationships/0/BibEntity/Dates/0/D');
     // format
     $format = $json->extractValue("Header/PubType");
     $this->format->setPublicFormat($format);
     $this->format->setInternalFormat($format);
     $this->format->setNormalizedFormat($this->normalizeFormat($format));
     // Item data
     foreach ($json->extractData('Items') as $item) {
         // title
         if ($item['Name'] == 'Title') {
             $this->title = $item['Data'];
         }
         // abstract
         if ($item['Name'] == 'Abstract') {
             $this->abstract = $item['Data'];
         }
         // publication source
         if ($item['Name'] == 'TitleSource' && $this->journal == "") {
             $this->journal = strip_tags(html_entity_decode($item['Data']));
         }
         // pmid
         if ($item['Label'] == 'PMID') {
             $this->pubmed_id = $item['Data'];
         }
         // notes
         if ($item['Label'] == 'Notes') {
             $this->notes[] = $item['Data'];
         }
     }
     // books
     $this->edition = $json->extractValue("Edition/0");
     $this->publisher = $this->toTitleCase($json->extractValue("Publisher/0"));
     $this->place = $json->extractValue("PublicationPlace_xml/0/name");
     // article
     $this->journal_title = $json->extractValue("RecordInfo/BibRecord/BibRelationships/IsPartOfRelationships/0/BibEntity/Titles/0/TitleFull");
     $this->start_page = $json->extractValue("RecordInfo/BibRecord/BibEntity/PhysicalDescription/Pagination/StartPage");
     if ($this->start_page != "" && $this->extent != "") {
         $this->end_page = $this->start_page + $this->extent - 1;
     }
     foreach ($json->extractData('RecordInfo/BibRecord/BibRelationships/IsPartOfRelationships/0/BibEntity/Numbering') as $number) {
         if ($number['Type'] == 'volume') {
             $this->volume = $number['Value'];
         } elseif ($number['Type'] == 'issue') {
             $this->issue = $number['Value'];
         }
     }
     // links
     foreach ($json->extractData('FullText/Links') as $link) {
         $type = $link['Type'];
         if (strstr($type, 'pdf')) {
             $type = Xerxes\Record\Link::PDF;
         }
         if (array_key_exists('Url', $link)) {
             $url = $link['Url'];
             $this->links[] = new Xerxes\Record\Link($url, $type);
         }
     }
     // subjects
     foreach ($json->extractData('RecordInfo/BibRecord/BibEntity/Subjects') as $subject) {
         $subject = Parser::toSentenceCase($subject['SubjectFull']);
         $subject_object = new Xerxes\Record\Subject();
         $subject_object->display = $subject;
         $subject_object->value = $subject;
         array_push($this->subjects, $subject_object);
     }
     // identifiers
     foreach ($json->extractData('RecordInfo/BibRecord/BibEntity/Identifiers') as $identifier) {
         // doi
         if ($identifier['Type'] == 'doi') {
             $this->doi = $identifier['Value'];
         }
     }
     foreach ($json->extractData('RecordInfo/BibRecord/BibRelationships/IsPartOfRelationships/0/BibEntity/Identifiers') as $identifier) {
         // isbn
         if (strstr($identifier['Type'], 'isbn')) {
             $this->isbns[] = $identifier['Value'];
         }
         // issn
         if (strstr($identifier['Type'], 'issn')) {
             $this->issns[] = $identifier['Value'];
         }
     }
     // authors
     foreach ($json->extractData('RecordInfo/BibRecord/BibRelationships/HasContributorRelationships') as $author) {
         $json_author = new Json($author);
         $author_object = new Xerxes\Record\Author($json_author->extractValue('PersonEntity/Name/NameFull'), null, 'personal');
         array_push($this->authors, $author_object);
     }
     if (array_key_exists('debugrec', $_GET)) {
         header('Content-type: text/plain');
         print_r($this);
         exit;
     }
 }
Esempio n. 2
0
 /**
  * Parse the EDS response
  *
  * @param string $response
  * @return ResultSet
  */
 public function parseResponse($response)
 {
     $json = new Json($response);
     // results
     $result_set = new ResultSet($this->config);
     // total
     $total = $json->extractValue('SearchResult/Statistics/TotalHits');
     $result_set->total = $total;
     // extract records
     foreach ($this->extractRecords($json) as $xerxes_record) {
         $result_set->addRecord($xerxes_record);
     }
     // extract facets
     $facets = $this->extractFacets($json);
     $result_set->setFacets($facets);
     return $result_set;
 }