====== 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("");
$this->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);
}
}
}