function ARRAYfetchValues($value_type) { $sql = SQLfetchValue($value_type); while ($array = $sql->FetchRow()) { $i = ++$i; $ARRAYvalues["{$array['value_code']}"][value_id] .= $array[value_id]; $ARRAYvalues["{$array['value_code']}"][value_type] .= $array[value_type]; $ARRAYvalues["{$array['value_code']}"][value_code] .= $array[value_code]; $ARRAYvalues["{$array['value_code']}"][value] .= $array[value]; } return $ARRAYvalues; }
function addTerm($skos, $node) { /* fectch hidden label ID */ $ARRAYhiddenLabelCode = ARRAYfetchValue("4", "H"); // Preferred label $prefLabels = $skos->xpath->query('./skos:prefLabel', $node); foreach ($prefLabels as $prefLabel) { $value = setI18nValue($skos, $prefLabel); if (isset($value)) { // find URI $uri = $node->getAttributeNodeNS('http://www.w3.org/1999/02/22-rdf-syntax-ns#', 'about'); if ($uri instanceof DOMAttr) { $source_uri = $uri->nodeValue; } $node_stringPreferedTerm = $value["value"]; $node_stringPreferedTermLang = $value["lang"]; //add term if ($node_stringPreferedTermLang == $_SESSION["CFGIdioma"]) { $ARRAYterm = ARRAYCode($source_uri); if ($ARRAYterm[tema_id]) { $term_id = $ARRAYterm[tema_id]; } else { $term_id = ALTAtema($node_stringPreferedTerm, "1", "13"); } } elseif (!$node_stringPreferedTermLang) { /* * What to do if the term is not in the same language of the controlled vocabulary ??? */ $ARRAYterm = ARRAYCode($source_uri); if ($ARRAYterm[tema_id]) { $term_id = $ARRAYterm[tema_id]; } else { $term_id = ALTAtema($node_stringPreferedTerm, "1", "13"); } } } } //This is a new term if (!$ARRAYterm[tema_id]) { edit_single_code($term_id, $source_uri); // Alternate labels foreach ($skos->xpath->query('./skos:altLabel', $node) as $altLabel) { $value = setI18nValue($skos, $altLabel); //the same language if (isset($value) && $_SESSION["CFGIdioma"] == $value["lang"]) { $node_alt_term[] = $value; $alt_term_id = ALTAtema($value["value"], "1", "13"); ALTArelacionXId($alt_term_id, $term_id, "4"); } } // Alternate hidden labels foreach ($skos->xpath->query('./skos:hiddenLabel', $node) as $altLabel) { $value = setI18nValue($skos, $altLabel); //the same language if (isset($value) && $_SESSION["CFGIdioma"] == $value["lang"]) { $node_alt_term[] = $value; $alt_term_id = ALTAtema($value["value"], "1", "13"); ALTArelacionXId($alt_term_id, $term_id, "4", $ARRAYhiddenLabelCode[value_id]); } } // Scope notes foreach ($skos->xpath->query('./skos:scopeNote', $node) as $scopeNote) { $value = setI18nValue($skos, $scopeNote); if (isset($value["value"]) && is_string($value["value"])) { $node_notes[] = $value; $lang_nota = $value["lang"] ? $value["lang"] : $node_stringPreferedTermLang; ALTAnota($term_id, "NA", $lang_nota, $value["value"]); } } // Definition notes foreach ($skos->xpath->query('./skos:definition', $node) as $defNote) { $value = setI18nValue($skos, $defNote); if (isset($value["value"])) { $node_defnotes[] = $value; $lang_nota = $value["lang"] ? $value["lang"] : $node_stringPreferedTermLang; ALTAnota($term_id, "NA", $lang_nota, $value["value"]); } } // changeNote foreach ($skos->xpath->query('./skos:changeNote', $node) as $defNote) { $value = setI18nValue($skos, $defNote); if (isset($value["value"])) { $node_defnotes[] = $value; $lang_nota = $value["lang"] ? $value["lang"] : $node_stringPreferedTermLang; ALTAnota($term_id, "NH", $lang_nota, $value["value"]); } } //~ // exactMatch $sqlMatchTypes = SQLfetchValue('URI_TYPE'); while ($arrayMatchTypes = $sqlMatchTypes->FetchRow()) { foreach ($skos->xpath->query("./skos:{$arrayMatchTypes['value']}", $node) as $matchNode) { // find URI $uri_match = $matchNode->getAttributeNodeNS('http://www.w3.org/1999/02/22-rdf-syntax-ns#', 'resource'); if ($uri_match instanceof DOMAttr) { abmURI("A", $term_id, array("uri" => $uri_match->nodeValue, "uri_type_id" => $arrayMatchTypes[value_id])); } } } // Find and add narrow terms // TODO: Merge broader/narrower relations for this term, as defining // inverse of relationship is not required by SKOS // http://www.w3.org/TR/2009/NOTE-skos-primer-20090818/#sechierarchy if ($uri instanceof DOMAttr) { foreach ($skos->xpath->query('./skos:Concept[skos:broader[@rdf:resource="' . $uri->nodeValue . '"]]') as $narrower) { if (!$narrower instanceof DOMElement) { continue; } $NT_term_id = addTerm($skos, $narrower); if ($NT_term_id) { ALTArelacionXId($term_id, $NT_term_id, "3"); } } } //end if new term } return $term_id; }