/** * This method needs to be changed to allow the script to know how to create more references. * * @param WikibaseFactory $wikibaseFactory * @param SparqlQueryRunner $sparqlQueryRunner * * @return array like array( 'Schema.org_type' => Referencer[] ) */ public function getReferencerMap(WikibaseFactory $wikibaseFactory, SparqlQueryRunner $sparqlQueryRunner) { return array('Book' => array(new ThingReferencer($wikibaseFactory, array('P50' => 'author', 'P110' => 'illustrator', 'P123' => 'publisher', 'P136' => 'genre')), new DateReferencer($wikibaseFactory, array('P577' => 'datePublished'))), 'Person' => array(new ThingReferencer($wikibaseFactory, array('P7' => 'sibling', 'P9' => 'sibling', 'P19' => 'birthPlace', 'P20' => 'deathPlace', 'P21' => 'gender', 'P22' => 'parent', 'P25' => 'parent', 'P26' => 'spouse', 'P40' => 'children', 'P27' => 'nationality', 'P734' => 'familyName', 'P735' => 'givenName')), new DateReferencer($wikibaseFactory, array('P569' => 'birthDate', 'P570' => 'deathDate'))), 'Movie' => array(new ThingReferencer($wikibaseFactory, array('P57' => 'director', 'P161' => 'actor', 'P162' => 'producer', 'P1040' => 'editor', 'P58' => 'author', 'P272' => array('creator', 'productionCompany'), 'P364' => 'inLanguage', 'P674' => 'character', 'P840' => 'contentLocation', 'P166' => 'award', 'P1657' => 'contentRating', 'P2360' => 'audience')), new MultiTextReferencer($wikibaseFactory, array('P136' => 'genre'), array('P136' => function () use($sparqlQueryRunner) { $filmGenreData = $sparqlQueryRunner->getItemIdStringsAndLabelsFromInstanceOf('Q201658'); $filmGenreRegexMap = array(); foreach ($filmGenreData as $itemIdString => $label) { if (preg_match('/ films?/i', $label)) { $regex = '/^' . preg_replace('/ films?/i', '( film)?', $label) . '$/i'; } else { $regex = '/^' . $label . '( film)?' . '$/i'; } $regex = preg_replace('/science ?fiction/i', '(science ?fiction|sci-fi)', $regex); $filmGenreRegexMap[$itemIdString] = $regex; } return $filmGenreRegexMap; })), new DateReferencer($wikibaseFactory, array('P577' => 'datePublished')))); }