Exemplo n.º 1
0
 /**
  * This function sets up the modules of the import framework according to the
  * settings, reads the terms and creates articles for them.
  *
  * @param string $settings
  * 		This XML string contains the modules (Transport Layer, Data Access Layer),
  * 		the data source, the import sets and the input, mapping and conflict
  * 		policy.
  *
  * @return mixed (boolean, string)
  * 		<true>, if all terms were successfully imported or an
  * 		error message, otherwise.
  *
  */
 public function importTerms($settings, $termImportName)
 {
     echo "Starting to import terms...\n";
     echo "\n" . $settings;
     global $smwgDIIP;
     require_once $smwgDIIP . '/specials/TermImport/SMW_XMLParser.php';
     $parser = new XMLParser($settings);
     $result = $parser->parse();
     if ($result !== TRUE) {
         return $result;
     }
     $tlModule = $parser->getValuesOfElement(array('TLModules', 'Module', 'id'));
     if (count($tlModule) == 0) {
         return "Error: Transport layer module was not defined.";
         //todo: language
     }
     $dalModule = $parser->getValuesOfElement(array('DALModules', 'Module', 'id'));
     if (count($dalModule) == 0) {
         return "Error: Data access layer module was not defined.";
         //todo: language
     }
     global $smwgDIIP;
     require_once $smwgDIIP . '/specials/TermImport/SMW_WIL.php';
     $wil = new WIL();
     $tlModules = $wil->getTLModules();
     echo "\n WIL connected";
     $res = $wil->connectTL($tlModule[0], $tlModules);
     if (stripos($res, '<value>true</value>') === false) {
         return "Connecting the transport layer module {$tlModule['0']} failed.";
         //todo: language
     }
     $dalModules = $wil->getDALModules();
     $res = $wil->connectDAL($dalModule[0], $dalModules);
     if (stripos($res, '<value>true</value>') === false) {
         return "Connecting the data access layer module {$dalModule['0']} failed.";
         //todo: language
     }
     $source = $parser->serializeElement(array('DataSource'));
     $importSets = $parser->serializeElement(array('ImportSets'));
     $inputPolicy = $parser->serializeElement(array('InputPolicy'));
     $conflictPolicy = $parser->serializeElement(array('ConflictPolicy'));
     echo "\nGet Terms";
     $terms = $wil->getTerms($source, $importSets, $inputPolicy, $conflictPolicy);
     echo "\nTerms in place";
     $mappingPolicy = $parser->serializeElement(array('MappingPolicy'));
     try {
         $result = $this->createArticles($terms, $mappingPolicy, $conflictPolicy, $wil, $termImportName);
         echo "Bot finished!\n";
         if ($result === true) {
             $result = wfMsg('smw_ti_import_successful');
         }
     } catch (Exception $e) {
         $result = "Something bad happened during the Term Import: " . $e;
     }
     return $result;
 }
Exemplo n.º 2
0
/**
 *
 * @param $tlID the ID of the Transport Layer
 * @param $dalID
 * @param $source_input an XML structure of the given source inputs
 * @param $givenImportSetName the given import set name (String)
 * @param $givenInputPol an XML structure with the given input policy
 * @param $mappingPage The name of the mapping article
 * @param $givenConflictPol Boolean: overwrite=true, preserve=false
 * @param $runBot run the bot???
 *
 * @return $result an XML structure
 */
function smwf_ti_connectTL($tlID, $dalID, $source_input, $givenImportSetName, $givenInputPol, $mappingPage, $givenConflictPol = true, $runBot, $termImportName = null, $updatePolicy = "", $edit = false, $createOnly = false)
{
    global $smwgDIIP, $wgOut;
    require_once $smwgDIIP . '/specials/TermImport/SMW_WIL.php';
    require_once $smwgDIIP . '/specials/TermImport/SMW_XMLParser.php';
    $wil = new WIL();
    $tlModules = $wil->getTLModules();
    //TODO Errorhandling!!!
    if (!$tlID) {
        // Error,keine TLID angegeben!!!
    }
    $res = $wil->connectTL($tlID, $tlModules);
    $dalModules = $wil->getDALModules();
    //return if no dalID is given
    if (!$dalID) {
        $tlModules = str_replace("<?xml version=\"1.0\"?>", "", $tlModules);
        $dalModules = str_replace("<?xml version=\"1.0\"?>", "", $dalModules);
        return '<result>' . $tlModules . $dalModules . '</result>';
    }
    $res = $wil->connectDAL($dalID, $dalModules);
    $source = $wil->getSourceSpecification();
    // return if no source is given
    if ((!$source_input || $source_input == '') && $res) {
        $tlModules = str_replace("<?xml version=\"1.0\"?>", "", $tlModules);
        $dalModules = str_replace("<?xml version=\"1.0\"?>", "", $dalModules);
        $source = str_replace("<?xml version=\"1.0\"?>", "", $source);
        return '<result>' . $tlModules . $dalModules . $source . '</result>';
    }
    if (isset($source_input)) {
        $source_xml = new SimpleXMLElement($source_input);
        $source_xml_alt = new SimpleXMLElement($source);
        foreach ($source_xml->children() as $second_gen) {
            $tag = $second_gen->getName();
            $value = (string) $second_gen;
            $result = $source_xml_alt->xpath($tag);
            //Change the old tag
            $source_xml_alt->{$tag} = $value;
        }
        //get the xml-string
        $source_result = $source_xml_alt->asXML();
    }
    $importSets = $wil->getImportSets($source_result);
    $p = new XMLParser($importSets);
    $result = $p->parse();
    if ($result == TRUE && $givenImportSetName && $givenImportSetName != '' && $givenImportSetName != 'ALL') {
        $p->removeAllParentElements('NAME', $givenImportSetName);
    }
    if ($result == TRUE && $givenImportSetName && $givenImportSetName == 'ALL') {
        $importSets = '<?xml version="1.0"?>' . '<IMPORTSETS XMLNS="http://www.ontoprise.de/smwplus#">' . '</IMPORTSETS>';
    } else {
        $importSets = $p->serialize();
    }
    $properties = $wil->getProperties($source_result, $importSets);
    if (!$givenInputPol || $givenInputPol == '') {
        // no input policy defined, create an empty one for getting the term-information
        $givenInputPol = '<?xml version="1.0"?>' . "\n" . '<InputPolicy xmlns="http://www.ontoprise.de/smwplus#">' . "\n" . '<terms>' . "\n" . '	<regex></regex>' . "\n" . '	<term></term>' . "\n" . '</terms>' . "\n" . '<properties>' . "\n" . '	<property>articleName</property>' . "\n" . '</properties>' . "\n" . '</InputPolicy>' . "\n";
    }
    $terms = $wil->getTermList($source_result, $importSets, $givenInputPol);
    if ($runBot == 0) {
        // prepare XML strings for return...
        $xmlResult = '<result>' . $tlModules . $dalModules . $source_result . $importSets . $properties . $terms . '</result>';
        $xmlResult = '<?xml version="1.0"?>' . str_replace('<?xml version="1.0"?>', "", $xmlResult);
        return $xmlResult;
    } elseif ($runBot == 1) {
        //do the Import!
        $title = Title::newFromText($mappingPage);
        if (!$title->exists()) {
            return '<?xml version="1.0"?>
	 			<ReturnValue xmlns="http://www.ontoprise.de/smwplus#">
	 		    <value>falseMap</value>
	 		    <message>' . wfMsg('smw_ti_nomappingpage') . '</message>
	 			</ReturnValue >';
        }
        $moduleConfig = '<?xml version="1.0"?>' . "\n" . '<ModuleConfiguration xmlns="http://www.ontoprise.de/smwplus#">' . "\n" . '  <TLModules>' . "\n" . '    <Module>' . "\n" . '        <id>' . $tlID . '</id>' . "\n" . '    </Module>' . "\n" . '  </TLModules >' . "\n" . '  <DALModules>' . "\n" . '    <Module>' . "\n" . '        <id>' . $dalID . '</id>' . "\n" . '    </Module>' . "\n" . '  </DALModules >' . "\n" . '</ModuleConfiguration>';
        $mappingPolicy = '<?xml version="1.0"?>' . "\n" . '<MappingPolicy xmlns="http://www.ontoprise.de/smwplus#">' . "\n" . '	<page>' . $mappingPage . '</page>' . "\n" . '</MappingPolicy >';
        if ($givenConflictPol && $givenConflictPol != '') {
            $conflictPolicy = '<?xml version="1.0"?>' . "\n" . '<ConflictPolicy xmlns="http://www.ontoprise.de/smwplus#">' . "\n" . '	<overwriteExistingTerms>' . $givenConflictPol . '</overwriteExistingTerms>' . "\n" . '</ConflictPolicy >';
        } else {
            //Error!no conflict policy given... is it possible with <select>?!?
        }
        //todo: error handling
        if ($updatePolicy == 0 || $updatePolicy == "") {
            $updatePolicy = "<once/>";
        } else {
            $updatePolicy = "<maxAge value=\"" . $updatePolicy . "\"/>";
        }
        $updatePolicy = '<?xml version="1.0"?>' . "\n" . '<UpdatePolicy xmlns="http://www.ontoprise.de/smwplus#">' . "\n" . $updatePolicy . '</UpdatePolicy>';
        $articleCreated = smwf_ti_createTIArticle($moduleConfig, $source_result, $mappingPolicy, $conflictPolicy, $givenInputPol, $importSets, $termImportName, $updatePolicy, $edit);
        if ($articleCreated !== true) {
            return $articleCreated;
        } else {
            if ($createOnly != "false") {
                return '<?xml version="1.0"?>
	 			<ReturnValue xmlns="http://www.ontoprise.de/smwplus#">
	 		    <value>articleCreated</value>
	 		    <message>' . $termImportName . '</message>
	 			</ReturnValue >';
            }
        }
        $terms = $wil->importTerms($moduleConfig, $source_result, $importSets, $givenInputPol, $mappingPolicy, $conflictPolicy, $termImportName);
        if ($terms == false) {
            //error while running bot
        } else {
            return $terms;
        }
    } else {
        // error, $runBot neither 0 nor 1
    }
    return null;
}