You are here

function ARC_rdfxml_parser::handle_open_2 in Taxonomy import/export via XML 6.2

Same name and namespace in other branches
  1. 5.2 arc/ARC_rdfxml_parser.php \ARC_rdfxml_parser::handle_open_2()
  2. 5 arc/ARC_rdfxml_parser.php \ARC_rdfxml_parser::handle_open_2()
  3. 6 arc/ARC_rdfxml_parser.php \ARC_rdfxml_parser::handle_open_2()
1 call to ARC_rdfxml_parser::handle_open_2()
ARC_rdfxml_parser::handle_open in arc/ARC_rdfxml_parser.php

File

arc/ARC_rdfxml_parser.php, line 460

Class

ARC_rdfxml_parser

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;
    }
  }
}