function ARC_rdfxml_parser::handle_open_2 in Taxonomy import/export via XML 5
Same name and namespace in other branches
- 5.2 arc/ARC_rdfxml_parser.php \ARC_rdfxml_parser::handle_open_2()
- 6.2 arc/ARC_rdfxml_parser.php \ARC_rdfxml_parser::handle_open_2()
- 6 arc/ARC_rdfxml_parser.php \ARC_rdfxml_parser::handle_open_2()
1 call to ARC_rdfxml_parser::handle_open_2()
File
- arc/
ARC_rdfxml_parser.php, line 460
Class
Code
function handle_open_2($tag, $attrs) {
$xml = "http://www.w3.org/XML/1998/namespace";
$rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";
$cur_p = $tag;
$cur_s =& $this->subjs[$this->s_count - 1];
unset($cur_s["p_xml_base"]);
unset($cur_s["p_xml_lang"]);
unset($cur_s["p_rdf_ID"]);
unset($cur_s["coll"]);
/* base */
if ($xml_base = @$attrs[$xml . " base"]) {
$cur_s["p_xml_base"] = $this
->calc_base($xml_base);
}
/* lang */
if ($xml_lang = @$attrs[$xml . " lang"]) {
$cur_s["p_xml_lang"] = $xml_lang;
}
/* adjust li */
if ($cur_p === $rdf . " li") {
$li_count = @$cur_s["li_count"] + 1;
$cur_s["li_count"] = $li_count;
$cur_p = $rdf . "_" . $li_count;
}
$cur_s["cur_p"] = str_replace(" ", "", $cur_p);
/* rdf:ID => reification */
if ($rdf_ID = @$attrs[$rdf . " ID"]) {
$cur_s["p_rdf_ID"] = $rdf_ID;
}
/* rdf:resource */
if (isset($attrs[$rdf . " resource"])) {
$rdf_resource = $attrs[$rdf . " resource"];
$rdf_resource = $this
->calc_uri($cur_s, $rdf_resource, "resource");
$this
->add_triple($cur_s, $cur_s["cur_p"], array(
"type" => "uri",
"uri" => $rdf_resource,
));
/* typing */
if (isset($attrs[$rdf . " type"])) {
$this
->add_triple(array(
"type" => "uri",
"uri" => $rdf_resource,
), $rdf . "type", array(
"type" => "uri",
"uri" => $attrs[$rdf . " type"],
));
}
/* reification */
if ($rdf_ID) {
/* reify, p is an empty element */
$this
->reify(array(
"type" => "uri",
"uri" => $this
->calc_uri($cur_s, $rdf_ID, "ID"),
), $cur_s, array(
"type" => "uri",
"uri" => $cur_s["cur_p"],
), array(
"type" => "uri",
"uri" => $rdf_resource,
));
unset($cur_s["p_rdf_ID"]);
}
$this->state = 3;
}
elseif ($rdf_nodeID = @$attrs[$rdf . " nodeID"]) {
$this
->add_triple($cur_s, $cur_s["cur_p"], array(
"type" => "bnode",
"bnode_id" => "_:" . $rdf_nodeID,
));
$this->state = 3;
if ($rdf_ID) {
/* reify */
$this
->reify(array(
"type" => "uri",
"uri" => $this
->calc_uri($cur_s, $rdf_ID, "ID"),
), $cur_s, array(
"type" => "uri",
"uri" => $cur_s["cur_p"],
), array(
"type" => "bnode",
"bnode_id" => "_:" . $rdf_nodeID,
));
}
}
elseif ($rdf_parseType = @$attrs[$rdf . " parseType"]) {
if ($rdf_parseType === "Literal") {
$cur_s["o_xml_level"] = 0;
$cur_s["o_xml_data"] = "";
$cur_s["p_xml_literal_level"] = 0;
$cur_s["declared_namespaces"] = array();
$this->state = 6;
}
elseif ($rdf_parseType === "Resource") {
$sub_s = array(
"type" => "bnode",
"bnode_id" => $this
->create_bnode_id(),
);
$this
->add_triple($cur_s, str_replace(" ", "", $cur_p), $sub_s);
$this
->push_s($sub_s);
if (isset($cur_s["p_rdf_ID"]) && ($p_rdf_ID = $cur_s["p_rdf_ID"])) {
/* reify, p is an empty element */
$this
->reify(array(
"type" => "uri",
"uri" => $this
->calc_uri($cur_s, $p_rdf_ID, "ID"),
), $cur_s, array(
"type" => "uri",
"uri" => $cur_s["cur_p"],
), $sub_s);
unset($cur_s["p_rdf_ID"]);
}
$this->state = 2;
}
elseif ($rdf_parseType === "Collection") {
$cur_s["coll"] = true;
$this->state = 4;
}
}
else {
/* o is sub_node or literal */
/* typed literal */
if ($rdf_datatype = @$attrs[$rdf . " datatype"]) {
$cur_s["o_rdf_datatype"] = $rdf_datatype;
}
$this->state = 4;
}
/* any other attrs (qualified, but not from rdf or xml namespace, except rdf:type) */
unset($tmp_node);
foreach ($attrs as $k => $v) {
if (strpos($k, $rdf) === false && strpos($k, $xml) === false && strpos($k, " ") !== false) {
if (!isset($tmp_node) || !$tmp_node) {
$cur_lang = $this
->get_cur_lang($cur_s);
if ($rdf_resource) {
$tmp_node = array(
"type" => "uri",
"uri" => $rdf_resource,
);
}
else {
$tmp_node = array(
"type" => "bnode",
"bnode_id" => $this
->create_bnode_id(),
);
$this
->add_triple($cur_s, str_replace(" ", "", $cur_p), $tmp_node);
}
}
if (isset($cur_s["p_rdf_ID"]) && ($p_rdf_ID = $cur_s["p_rdf_ID"])) {
/* reify, but only once, p is an empty element */
$this
->reify(array(
"type" => "uri",
"uri" => $this
->calc_uri($cur_s, $p_rdf_ID, "ID"),
), $cur_s, array(
"type" => "uri",
"uri" => $cur_s["cur_p"],
), $tmp_node);
unset($cur_s["p_rdf_ID"]);
}
$this
->add_triple($tmp_node, str_replace(" ", "", $k), array(
"type" => "literal",
"val" => $v,
"lang" => $cur_lang,
));
$this->state = 3;
}
}
}