====== Scrutari et MediaWiki ====== L'exportation des données de MediaWiki vers le format ScrutariData a été fait pour le [[http://fr.coredem.info/wiki|Wikicoredem]]. Dans l'état actuel, il est assez simpliste, la base générée ne comprend qu'un seul corpus. Cette exportation se fait à l'aide d'une classe php !!MediawikiScrutariDataWriter!! qui utilise une classe utilitaire !!UtilXmlWriter!!. Les points à savoir pour comprendre le code sont les suivants : *La question de la connexion à la base de données n'est pas traitée, on considère qu'elle est établie préalablement (de là le simple appel //$resultat = mysql_query($requete);//) *Les premières méthodes de //MediawikiScrutariDataWriter// qui commencent par **set** sont des méthodes de définition des différents paramètres utilisés dans la méthode principale //writeScrutariData()// *L'argument //$file// de la méthode //writeScrutariData()// correspond à un pointeur vers un fichier, s'il est omis, le XML sera écrit en sortie (fonction **echo**) *Seules les pages de l'espace de nom principal sont extraites et les pages de redirection sont ignorées. Pour affiner la requête, il faut modifier la ligne //$requete = "SELECT page_id,page_title FROM page WHERE page_namespace=0 AND page_is_redirect != 1 ORDER BY page_id";//. Le résultat est accessible ici : http://scrutari.coredem.info/infos/php/coredem.scrutari-data.php?lang=fr. ===== class-MediawikiScrutariDataWriter.php ===== authority = $authority; } public function setBaseName($baseName) { $this->baseName = $baseName; } public function setBaseIcon($baseIcon) { $this->baseIcon = $baseIcon; } public function setLang($lang) { $this->lang = $lang; } public function setBaseIntituleShort($baseIntituleShort) { $this->baseIntituleShort = $baseIntituleShort; } public function setBaseIntituleLong($baseIntituleLong) { $this->baseIntituleLong = $baseIntituleLong; } public function setCorpusName($corpusName) { $this->corpusName = $corpusName; } public function setCorpusIntituleCorpus($corpusIntituleCorpus) { $this->corpusIntituleCorpus = $corpusIntituleCorpus; } public function setCorpusIntituleFiche($corpusIntituleFiche) { $this->corpusIntituleFiche = $corpusIntituleFiche; } public function setHrefParent($hrefParent) { $this->hrefParent = $hrefParent; } public function writeScrutariData($file) { $xmlWriter = new UtilXmlWriter($file); $xmlWriter->appendDeclaration(); $xmlWriter->openTag("base"); $xmlWriter->openTag("base-metadata"); $xmlWriter->addElement("authority",$this->authority); $xmlWriter->addElement("base-name",$this->baseName); $xmlWriter->addElement("base-icon",$this->baseIcon); $xmlWriter->openTag("intitule-short"); $xmlWriter->addLibElement($this->lang,$this->baseIntituleShort); $xmlWriter->closeTag("intitule-short"); $xmlWriter->openTag("intitule-long"); $xmlWriter->addLibElement($this->lang,$this->baseIntituleLong); $xmlWriter->closeTag("intitule-long"); $xmlWriter->openTag("langs-ui"); $xmlWriter->addElement("lang",$this->lang); $xmlWriter->closeTag("langs-ui"); $xmlWriter->closeTag("base-metadata"); $xmlWriter->write("write($this->corpusName); $xmlWriter->write("\">"); $xmlWriter->openTag("corpus-metadata"); $xmlWriter->openTag("intitule-corpus"); $xmlWriter->addLibElement($this->lang,$this->corpusIntituleCorpus); $xmlWriter->closeTag("intitule-corpus"); $xmlWriter->openTag("intitule-fiche"); $xmlWriter->addLibElement($this->lang,$this->corpusIntituleFiche); $xmlWriter->closeTag("intitule-fiche"); $xmlWriter->addElement("type","CNC"); $xmlWriter->addElement("href-parent",$this->hrefParent); $xmlWriter->closeTag("corpus-metadata"); $requete = "SELECT page_id,page_title FROM page WHERE page_namespace=0 AND page_is_redirect != 1 ORDER BY page_id"; $resultat = mysql_query($requete); while($row = mysql_fetch_row($resultat)) { $page_id = $row[0]; $page_title = $row[1]; $xmlWriter->write("write($page_id); $xmlWriter->write("\">"); $titre = str_replace("_"," ",$page_title); $xmlWriter->addElement("titre",$titre); $xmlWriter->addElement("lang",$this->lang); $href = rawurlencode($page_title); $xmlWriter->addElement(href,$href); $xmlWriter->closeTag("fiche"); } $xmlWriter->closeTag("corpus"); $xmlWriter->closeTag("base"); } } ===== class-UtilXmlWriter.php ===== file = $file; } function appendDeclaration() { $this->write("\n"); } function openTag($tagName) { $this->write("<"); $this->write($tagName); $this->write(">"); } function closeTag($tagName) { $this->write("write($tagName); $this->write(">"); $this->write("\n"); } function addElement($tagName, $value) { $this->openTag($tagName); $this->write($value); $this->closeTag($tagName); } function addLibElement($lang,$value) { $this->write("write($lang); $this->write("\">"); $this->write($value); $this->write(""); } function write($text) { if ($this->file) { fwrite($this->file,$text); } else { print($text); } } }