rdfWriter = $writer; } /** * Setup prefixes relevant for the dump */ public function setupPrefixes() { $this->rdfWriter->prefix( self::ONTOLOGY_PREFIX, self::ONTOLOGY_URL ); $this->rdfWriter->prefix( 'rdfs', 'http://www.w3.org/2000/01/rdf-schema#' ); $this->rdfWriter->prefix( 'owl', 'http://www.w3.org/2002/07/owl#' ); $this->rdfWriter->prefix( 'schema', 'http://schema.org/' ); $this->rdfWriter->prefix( 'cc', 'http://creativecommons.org/ns#' ); } /** * Write RDF data for link between categories. * @param string $fromName Child category name * @param string $toName Parent category name */ public function writeCategoryLinkData( $fromName, $toName ) { $titleFrom = Title::makeTitle( NS_CATEGORY, $fromName ); $titleTo = Title::makeTitle( NS_CATEGORY, $toName ); $this->rdfWriter->about( $this->titleToUrl( $titleFrom ) ) ->say( self::ONTOLOGY_PREFIX, 'isInCategory' ) ->is( $this->titleToUrl( $titleTo ) ); } /** * Write out the data for single category. * @param string $categoryName Category name * @param bool $isHidden Hidden category? * @param int $pages Page count (note this includes only Wiki articles, not subcats or files) * @param int $subcategories Subcategory count */ public function writeCategoryData( $categoryName, $isHidden, $pages, $subcategories ) { $title = Title::makeTitle( NS_CATEGORY, $categoryName ); $this->rdfWriter->about( $this->titleToUrl( $title ) ) ->say( 'a' ) ->is( self::ONTOLOGY_PREFIX, 'Category' ); if ( $isHidden ) { $this->rdfWriter->is( self::ONTOLOGY_PREFIX, 'HiddenCategory' ); } $titletext = $title->getText(); $this->rdfWriter->say( 'rdfs', 'label' )->value( $titletext ); $this->rdfWriter->say( self::ONTOLOGY_PREFIX, 'pages' )->value( $pages ); $this->rdfWriter->say( self::ONTOLOGY_PREFIX, 'subcategories' )->value( $subcategories ); // TODO: do we want files too here? Easy to add, but don't have use case so far. } /** * Make URL from title label * @param string $titleLabel Short label (without namespace) of the category * @return string URL for the category */ public function labelToUrl( $titleLabel ) { return $this->titleToUrl( Title::makeTitle( NS_CATEGORY, $titleLabel ) ); } /** * Convert Title to link to target page. * @param Title $title * @return string URL for the category */ private function titleToUrl( Title $title ) { return $title->getFullURL( '', false, PROTO_CANONICAL ); } /** * Get URI of the dump for this particular wiki. * @return false|string */ public function getDumpURI() { return $this->titleToUrl( Title::makeTitle( NS_MAIN, self::SPECIAL_DUMP ) ); } }