/** * * * @author Frederick Giasson, Structured Dynamics LLC. */ private function initiateOwlBridgeSession() { // Starts the OWLAPI process/bridge require_once $this->ws->owlapiBridgeURI; // Create the OWLAPI session object that could have been persisted on the OWLAPI instance. // Second param "false" => we re-use the pre-created session without destroying the previous one // third param "0" => it nevers timeout. if ($this->OwlApiSession == null) { $this->OwlApiSession = java_session("OWLAPI", false, 0); } }
function get() { echo "hello Java Handler here"; $CA = new Java("calculator.CalculatorBean"); $session = java_session(); if (is_null(java_values($calcinstance = $session->get("calculatorInstance")))) { $session->put("calculatorInstance", $calcinstance = new Java("calculator.CalculatorBean")); } echo "<br>after calcultator"; echo "<br>session from java = " . java_values($calcinstance = $session->get("calculatorInstance")); if (eregi('^/java/rpc/*', $_SERVER['REQUEST_URI'])) { $RPC = new Java("rpc.test.RpcConsumer"); $RPC->test(); echo "<br> RPC Service on 8082 "; } }
<?php /** @defgroup WsOntology Ontology Management Web Service */ //@{ /*! @file \StructuredDynamics\structwsf\ws\ontology\admin\destroy.php @brief Destroy all the OWLAPI instances in tomcat. If this script is ran, no ontologies will be loaded anymore. You would have to reload all the ontologies in the OWLAPI. You may want to restrict the access to this /admin/ folder in your Apache settings so that not everybody has access to it. */ use StructuredDynamics\structwsf\ws\framework\WebService; /* This script destroy the OWLAPI session. Once destroyed, the session as to be re-initialized by running the init.php script. */ /* Get the pool of stories to process Can be a URL or a file reference. */ $network_ini = parse_ini_file(WebService::$network_ini . "network.ini", TRUE); // Starts the OLAPI process/bridge require_once $network_ini["owlapi"]["bridge_uri"]; // Destroy the scones session // Second param "false" => we re-use the pre-created session without destroying the previous one // third param "0" => it nevers timeout. $OwlApiSession = java_session("OWLAPI", false, 0); $OwlApiSession->destroy(); echo "Destroyed..."; //@}
This init.php script has to be ran each time that tomcat is restarted. */ error_reporting(E_ALL); ini_set('display_errors', '1'); /* Get the pool of stories to process Can be a URL or a file reference. */ $config_ini = parse_ini_file("../config.ini", TRUE); // Starts the GATE process/bridge require_once $config_ini["gate"]["gateBridgeURI"]; // Create a Scones session where wewill save the Gate objects (started & loaded Gate application). // Second param "false" => we re-use the pre-created session without destroying the previous one // third param "0" => it nevers timeout. $SconesSession = java_session($config_ini["gate"]["sessionName"], false, 0); // Make sure the scones session is not already opened if (is_null(java_values($SconesSession->get("initialized")))) { /** * NOTE, SOMETIMES WHEN WE RUN SOMETHING FOR THE FIRST TIME, THE BRIDGE/TOMCAT CAN'T RESOLVE SOME * PATHS. WE HAVE TO CREATE SUCH A DUMMY OBJECT "ONCE" (? huhu) AND HE WILL FIND IT IN THE FUTURE... * I HAVE NO IDEA OF WHAT CAUSE THIS ISSUE, IF IT IS RELATED TO GATE ONLY OR NOT. */ $test = new java('gate.creole.ontology.OConstants$OntologyFormat'); // The session is not yet initialized. $SconesSession->put("initialized", FALSE); // The number of sessions that have been created for this Scones instance $SconesSession->put("nbSessions", $config_ini["gate"]["nbSessions"]); $Gate = java("gate.Gate"); $PersistenceManager = java("gate.util.persistence.PersistenceManager"); // Initialize GATE
<?php require_once "java/Java.inc"; $session = java_session(); ?> <HTML> <TITLE>PHP and JSP session sharing</title> <BODY> <?php if (java_is_null($session->get("counter"))) { $session->put("counter", 1); } $counter = java_values($session->get("counter")); print "HttpSession variable \"counter\": {$counter}<br>\n"; $session->put("counter", $counter + 1); ?> <a href="sessionSharing.jsp">JSP page</a> </BODY> </HTML>
<?php include_once "java/Java.inc"; $s = new java("java.lang.String", 12); $c1 = java_context(); $c2 = java_session(); $c3 = java_session(); $c4 = java_context(); echo "{$c1}\n{$c2}\n{$c3}\n{$c4}\n"; $instance = java_instanceof($s, new java("java.lang.String")); if (!$c1 || !$c2 || !$c3 || !$c4 || !$instance) { echo "ERROR\n"; exit(1); } echo "test okay\n"; exit(0);
<?php require_once "java/Java.inc"; java_session(); echo "jsp says: " . java_virtual("/jsr223.jsp", true); echo "<br>Previous output generated by /jsr223.jsp resource";
/** Do content negotiation as an external Web Service @param $accept Accepted mime types (HTTP header) @param $accept_charset Accepted charsets (HTTP header) @param $accept_encoding Accepted encodings (HTTP header) @param $accept_language Accepted languages (HTTP header) @return returns NULL @author Frederick Giasson, Structured Dynamics LLC. */ public function ws_conneg($accept, $accept_charset, $accept_encoding, $accept_language) { $this->conneg = new Conneg($accept, $accept_charset, $accept_encoding, $accept_language, Scones::$supportedSerializations); // If the query is still valid if ($this->conneg->getStatus() == 200) { // Validate query $this->validateQuery(); } // If the query is still valid if ($this->conneg->getStatus() == 200) { /* Get the pool of stories to process Can be a URL or a file reference. */ $this->config_ini = parse_ini_file("config.ini", TRUE); // Make sure the service if configured if ($this->config_ini === FALSE) { $this->conneg->setStatus(400); $this->conneg->setStatusMsg("Bad Request"); $this->conneg->setStatusMsgExt($this->errorMessenger->_201->name); $this->conneg->setError($this->errorMessenger->_201->id, $this->errorMessenger->ws, $this->errorMessenger->_201->name, $this->errorMessenger->_201->description, "", $this->errorMessenger->_201->level); return; } // Starts the GATE process/bridge require_once $this->config_ini["gate"]["gateBridgeURI"]; // Create a Scones session where we will save the Gate objects (started & loaded Gate application). // Second param "false" => we re-use the pre-created session without destroying the previous one // third param "0" => it nevers timeout. $this->SconesSession = java_session($this->config_ini["gate"]["sessionName"], false, 0); if (is_null(java_values($this->SconesSession->get("initialized")))) { /* If the "initialized" session variable is null, it means that the Scone threads are not initialized, and that they is no current in initialization. */ $this->conneg->setStatus(400); $this->conneg->setStatusMsg("Bad Request"); $this->conneg->setStatusMsgExt($this->errorMessenger->_202->name); $this->conneg->setError($this->errorMessenger->_202->id, $this->errorMessenger->ws, $this->errorMessenger->_202->name, $this->errorMessenger->_202->description, "", $this->errorMessenger->_202->level); } if (java_values($this->SconesSession->get("initialized")) === FALSE) { /* If the "initialized" session variable is FALSE, it means that the Scone threads are being initialized. */ $this->conneg->setStatus(400); $this->conneg->setStatusMsg("Bad Request"); $this->conneg->setStatusMsgExt($this->errorMessenger->_203->name); $this->conneg->setError($this->errorMessenger->_203->id, $this->errorMessenger->ws, $this->errorMessenger->_203->name, $this->errorMessenger->_203->description, "", $this->errorMessenger->_203->level); } } }
public function processInterface() { // Make sure there was no conneg error prior to this process call if ($this->ws->conneg->getStatus() == 200) { // Starts the OWLAPI process/bridge require_once $this->ws->owlapiBridgeURI; // Create the OWLAPI session object that could have been persisted on the OWLAPI instance. // Second param "false" => we re-use the pre-created session without destroying the previous one // third param "0" => it nevers timeout. if ($this->ws->OwlApiSession == null) { $this->ws->OwlApiSession = java_session("OWLAPI", false, 0); } $ontology; try { $ontology = new OWLOntology($this->ws->ontologyUri, $this->ws->OwlApiSession, TRUE); $ontology->setLanguage($this->ws->lang); if (strtolower($this->ws->owlapiReasoner) == "pellet") { $ontology->usePelletReasoner(); } elseif (strtolower($this->ws->owlapiReasoner) == "hermit") { $ontology->useHermitReasoner(); } elseif (strtolower($this->ws->owlapiReasoner) == "factpp") { $ontology->useFactppReasoner(); } } catch (Exception $e) { if (strtolower($this->ws->function) != "getserializedclasshierarchy" && strtolower($this->ws->function) != "getserializedpropertyhierarchy" && strtolower($this->ws->function) != "getironxmlschema" && strtolower($this->ws->function) != "getironjsonschema" && strtolower($this->ws->function) != "getloadedontologies") { $this->returnError(400, "Bad Request", "_300"); return; } } if (isset($ontology)) { if ($this->ws->useReasoner) { $ontology->useReasoner(); } else { $ontology->stopUsingReasoner(); } } if (isset($this->ws->parameters["direct"]) && $this->ws->parameters["direct"] != "") { $this->ws->parameters["direct"] = strtolower($this->ws->parameters["direct"]); if ($this->ws->parameters["direct"] == "false" || $this->ws->parameters["direct"] == "0" || $this->ws->parameters["direct"] == "off") { $this->ws->parameters["direct"] = false; } else { $this->ws->parameters["direct"] = true; } } switch (strtolower($this->ws->function)) { case "getserialized": $this->ws->conneg->setStatus(200); $this->ws->conneg->setStatusMsg("OK"); $this->ws->getSerialized = $ontology->getSerialization(); return; break; case "getclass": if (!isset($this->ws->parameters["uri"]) || $this->ws->parameters["uri"] == "") { $this->returnError(400, "Bad Request", "_202"); return; } $class = $ontology->_getClass($this->ws->parameters["uri"]); if ($class == null) { $this->returnError(400, "Bad Request", "_205"); } else { $subject = new Subject($this->ws->parameters["uri"]); $subject->setSubject($ontology->_getClassDescription($class)); $this->ws->rset->addSubject($subject); } break; case "getclasses": $limit = -1; $offset = 0; if (isset($this->ws->parameters["limit"])) { $limit = $this->ws->parameters["limit"]; } if (isset($this->ws->parameters["offset"])) { $offset = $this->ws->parameters["offset"]; } switch (strtolower($this->ws->parameters["mode"])) { case "uris": $classes = $ontology->getClassesUri($limit, $offset); foreach ($classes as $class) { $subject = new Subject($class); $subject->setType("owl:Class"); $this->ws->rset->addSubject($subject); } break; case "descriptions": $this->ws->rset->setResultset(array($this->ws->ontologyUri => $ontology->getClassesDescription($limit, $offset))); break; default: $this->returnError(400, "Bad Request", "_201"); return; break; } break; case "getnamedindividual": if (!isset($this->ws->parameters["uri"]) || $this->ws->parameters["uri"] == "") { $this->returnError(400, "Bad Request", "_202"); return; } $namedIndividual = $ontology->_getNamedIndividual($this->ws->parameters["uri"]); if ($namedIndividual == null) { $this->returnError(400, "Bad Request", "_206"); } else { $subject = new Subject($this->ws->parameters["uri"]); $subject->setSubject($ontology->_getNamedIndividualDescription($namedIndividual)); $this->ws->rset->addSubject($subject); } break; case "getnamedindividuals": $limit = -1; $offset = 0; $direct = true; if (isset($this->ws->parameters["limit"])) { $limit = $this->ws->parameters["limit"]; } if (isset($this->ws->parameters["offset"])) { $offset = $this->ws->parameters["offset"]; } if (isset($this->ws->parameters["direct"])) { switch ($this->ws->parameters["direct"]) { case "0": $direct = false; break; case "1": $direct = true; break; } } $classUri = "all"; if (!isset($this->ws->parameters["classuri"])) { $classUri = $this->ws->parameters["classuri"]; } switch (strtolower($this->ws->parameters["mode"])) { case "uris": $namedindividuals = $ontology->getNamedIndividualsUri($classUri, $direct, $limit, $offset); foreach ($namedindividuals as $ni) { $subject = new Subject($ni); $subject->setType("owl:NamedIndividual"); $this->ws->rset->addSubject($subject); } break; case "descriptions": $this->ws->rset->setResultset(array($this->ws->ontologyUri => $ontology->getNamedIndividualsDescription($classUri, $direct, $limit, $offset))); break; case "list": $this->ws->rset->setResultset(array($this->ws->ontologyUri => $ontology->getNamedIndividualsDescription($classUri, $direct, $limit, $offset, TRUE))); break; default: $this->returnError(400, "Bad Request", "_201", "Mode provided: " . $this->ws->parameters["mode"]); return; break; } break; case "getsubclasses": if (!isset($this->ws->parameters["uri"]) || $this->ws->parameters["uri"] == "") { $this->returnError(400, "Bad Request", "_202"); return; } switch (strtolower($this->ws->parameters["mode"])) { case "uris": $classes = $ontology->getSubClassesUri($this->ws->parameters["uri"], $this->ws->parameters["direct"]); foreach ($classes as $class) { $subject = new Subject($class); $subject->setType("owl:Class"); $this->ws->rset->addSubject($subject); } break; case "descriptions": $this->ws->rset->setResultset(array($this->ws->ontologyUri => $ontology->getSubClassesDescription($this->ws->parameters["uri"], $this->ws->parameters["direct"]))); break; case "hierarchy": $this->ws->rset->setResultset(array($this->ws->ontologyUri => $ontology->getSubClassesDescription($this->ws->parameters["uri"], TRUE, TRUE))); break; default: $this->returnError(400, "Bad Request", "_201"); return; break; } break; case "getsuperclasses": if (!isset($this->ws->parameters["uri"]) || $this->ws->parameters["uri"] == "") { $this->returnError(400, "Bad Request", "_202"); return; } switch (strtolower($this->ws->parameters["mode"])) { case "uris": $classes = $ontology->getSuperClassesUri($this->ws->parameters["uri"], $this->ws->parameters["direct"]); foreach ($classes as $class) { $subject = new Subject($class); $subject->setType("owl:Class"); $this->ws->rset->addSubject($subject); } break; case "descriptions": $this->ws->rset->setResultset(array($this->ws->ontologyUri => $ontology->getSuperClassesDescription($this->ws->parameters["uri"], $this->ws->parameters["direct"]))); break; default: $this->returnError(400, "Bad Request", "_201"); return; break; } break; case "getequivalentclasses": if (!isset($this->ws->parameters["uri"]) || $this->ws->parameters["uri"] == "") { $this->returnError(400, "Bad Request", "_202"); return; } switch (strtolower($this->ws->parameters["mode"])) { case "uris": $classes = $ontology->getEquivalentClassesUri($this->ws->parameters["uri"]); foreach ($classes as $class) { $subject = new Subject($class); $subject->setType("owl:Class"); $this->ws->rset->addSubject($subject); } break; case "descriptions": $this->ws->rset->setResultset(array($this->ws->ontologyUri => $ontology->getEquivalentClassesDescription($this->ws->parameters["uri"]))); break; default: $this->returnError(400, "Bad Request", "_201"); return; break; } break; case "getdisjointclasses": if (!isset($this->ws->parameters["uri"]) || $this->ws->parameters["uri"] == "") { $this->returnError(400, "Bad Request", "_202"); return; } switch (strtolower($this->ws->parameters["mode"])) { case "uris": $classes = $ontology->getDisjointClassesUri($this->ws->parameters["uri"]); foreach ($classes as $class) { $subject = new Subject($class); $subject->setType("owl:Class"); $this->ws->rset->addSubject($subject); } break; case "descriptions": $this->ws->rset->setResultset(array($this->ws->ontologyUri => $ontology->getDisjointClassesDescription($this->ws->parameters["uri"]))); break; default: $this->returnError(400, "Bad Request", "_201"); return; break; } break; case "getontologies": switch (strtolower($this->ws->parameters["mode"])) { case "uris": $ontologies = $ontology->getOntologiesUri(); foreach ($ontologies as $ontology) { $subject = new Subject($ontology); $subject->setType("owl:Ontology"); $this->ws->rset->addSubject($subject); } break; default: $this->returnError(400, "Bad Request", "_201"); return; break; } break; case "getloadedontologies": switch (strtolower($this->ws->parameters["mode"])) { case "uris": $ontologies = OWLOntology::getLoadedOntologiesUri($this->ws->OwlApiSession); foreach ($ontologies as $ontology) { $subject = new Subject($ontology); $subject->setType("owl:Ontology"); $this->ws->rset->addSubject($subject); } break; case "descriptions": $this->ws->rset->setResultset(array($this->ws->ontologyUri => OWLOntology::getLoadedOntologiesDescription($this->ws->OwlApiSession))); break; default: $this->ws->conneg->setStatus(400); $this->ws->conneg->setStatusMsg("Bad Request"); $this->ws->conneg->setStatusMsgExt($this->ws->errorMessenger->_201->name); $this->ws->conneg->setError($this->ws->errorMessenger->_201->id, $this->ws->errorMessenger->ws, $this->ws->errorMessenger->_201->name, $this->ws->errorMessenger->_201->description, "", $this->ws->errorMessenger->_201->level); return; break; } break; case "getserializedclasshierarchy": $sch = $this->generationSerializedClassHierarchy($this->ws->OwlApiSession); $subject = new Subject($this->ws->ontologyUri); $subject->setType("owl:Ontology"); $subject->setDataAttribute(Namespaces::$wsf . "serializedClassHierarchy", $sch); $this->ws->rset->addSubject($subject); break; case "getserializedpropertyhierarchy": $sch = $this->generationSerializedPropertyHierarchy($this->ws->OwlApiSession); $subject = new Subject($this->ws->ontologyUri); $subject->setType("owl:Ontology"); $subject->setDataAttribute(Namespaces::$wsf . "serializedPropertyHierarchy", $sch); $this->ws->rset->addSubject($subject); break; case "getironxmlschema": $subjectTriples = $ontology->getClassesDescription($limit, $offset); $schema = '<schema><version>0.1</version><typeList>'; $prefixes = array(); foreach ($subjectTriples as $uri => $subject) { $this->manageIronPrefixes($uri, $prefixes); $schema .= "<" . $this->ironPrefixize($uri, $prefixes) . ">"; $schema .= "<description>" . $this->ws->xmlEncode($this->getDescription($subject)) . "</description>"; $schema .= "<prefLabel>" . $this->ws->xmlEncode($this->getLabel($uri, $subject)) . "</prefLabel>"; foreach ($subject as $predicate => $values) { foreach ($values as $value) { switch ($predicate) { case Namespaces::$rdfs . "subClassOf": $this->manageIronPrefixes($value["uri"], $prefixes); $schema .= "<subTypeOf>" . $this->ws->xmlEncode($this->ironPrefixize($value["uri"], $prefixes)) . "</subTypeOf>"; break; case Namespaces::$sco . "displayControl": if (isset($value["uri"])) { $displayControl = substr($value["uri"], strripos($value["uri"], "#") + 1); } else { $displayControl = $value["value"]; } $schema .= "<displayControl>" . $this->ws->xmlEncode($displayControl) . "</displayControl>"; break; case Namespaces::$sco . "ignoredBy": if (isset($value["uri"])) { $ignoredBy = substr($value["uri"], strripos($value["uri"], "#") + 1); } else { $ignoredBy = $value["value"]; } $schema .= "<ignoredBy>" . $this->ws->xmlEncode($ignoredBy) . "</ignoredBy>"; break; case Namespaces::$sco . "shortLabel": $schema .= "<shortLabel>" . $this->ws->xmlEncode($value["value"]) . "</shortLabel>"; break; case Namespaces::$sco . "mapMarkerImageUrl": $schema .= "<mapMarkerImageUrl>" . $this->ws->xmlEncode($value["value"]) . "</mapMarkerImageUrl>"; break; case Namespaces::$sco . "relationBrowserNodeType": $this->manageIronPrefixes($value["uri"], $prefixes); $schema .= "<relationBrowserNodeType>" . $this->ws->xmlEncode($this->ironPrefixize($value["uri"], $prefixes)) . "</relationBrowserNodeType>"; break; } } } $schema .= "</" . $this->ironPrefixize($uri, $prefixes) . ">"; } $schema .= "</typeList>"; $schema .= "<attributeList>"; $subjectTriples = $ontology->getPropertiesDescription(TRUE); foreach ($subjectTriples as $uri => $subject) { $this->manageIronPrefixes($uri, $prefixes); $schema .= "<" . $this->ironPrefixize($uri, $prefixes) . ">"; $schema .= "<description>" . $this->ws->xmlEncode($this->getDescription($subject)) . "</description>"; $schema .= "<prefLabel>" . $this->ws->xmlEncode($this->getLabel($uri, $subject)) . "</prefLabel>"; $schema .= "<type>" . Namespaces::$owl . "DatatypeProperty</type>"; foreach ($subject as $predicate => $values) { foreach ($values as $value) { switch ($predicate) { case Namespaces::$rdfs . "domain": $this->manageIronPrefixes($value["uri"], $prefixes); $schema .= "<allowedType>" . $this->ws->xmlEncode($this->ironPrefixize($value["uri"], $prefixes)) . "</allowedType>"; break; case Namespaces::$rdfs . "range": $this->manageIronPrefixes($value["uri"], $prefixes); $schema .= "<allowedValue><type>" . $this->ws->xmlEncode($this->ironPrefixize($value["uri"], $prefixes)) . "</type></allowedValue>"; break; case Namespaces::$sco . "displayControl": if (isset($value["uri"])) { $displayControl = substr($value["uri"], strripos($value["uri"], "#") + 1); } else { $displayControl = $value["value"]; } $schema .= "<displayControl>" . $this->ws->xmlEncode($displayControl) . "</displayControl>"; break; case Namespaces::$sco . "ignoredBy": if (isset($value["uri"])) { $ignoredBy = substr($value["uri"], strripos($value["uri"], "#") + 1); } else { $ignoredBy = $value["value"]; } $schema .= "<ignoredBy>" . $this->ws->xmlEncode($ignoredBy) . "</ignoredBy>"; break; case Namespaces::$sco . "comparableWith": $this->manageIronPrefixes($value["uri"], $prefixes); $schema .= "<comparableWith>" . $this->ws->xmlEncode($this->ironPrefixize($value["uri"], $prefixes)) . "</comparableWith>"; break; case Namespaces::$sco . "unitType": $this->manageIronPrefixes($value["uri"], $prefixes); $schema .= "<unitType>" . $this->ws->xmlEncode($this->ironPrefixize($value["uri"], $prefixes)) . "</unitType>"; break; case Namespaces::$sco . "shortLabel": $schema .= "<shortLabel>" . $this->ws->xmlEncode($value["value"]) . "</shortLabel>"; break; case Namespaces::$sco . "minCardinality": $schema .= "<minCardinality>" . $this->ws->xmlEncode($value["value"]) . "</minCardinality>"; break; case Namespaces::$sco . "maxCardinality": $schema .= "<maxCardinality>" . $this->ws->xmlEncode($value["value"]) . "</maxCardinality>"; break; case Namespaces::$sco . "cardinality": $schema .= "<cardinality>" . $this->ws->xmlEncode($value["value"]) . "</cardinality>"; break; case Namespaces::$sco . "orderingValue": $schema .= "<orderingValue>" . $this->ws->xmlEncode($value["value"]) . "</orderingValue>"; break; case Namespaces::$rdfs . "subPropertyOf": $this->manageIronPrefixes($value["uri"], $prefixes); $schema .= "<subPropertyOf>" . $this->ws->xmlEncode($this->ironPrefixize($value["uri"], $prefixes)) . "</subPropertyOf>"; break; case Namespaces::$iron . "allowedValue": $schema .= "<allowedValue><primitive>" . $this->ws->xmlEncode($value["value"]) . "</primitive></allowedValue>"; break; } } } $schema .= "</" . $this->ironPrefixize($uri, $prefixes) . ">"; } $subjectTriples = $ontology->getPropertiesDescription(FALSE, FALSE, TRUE); foreach ($subjectTriples as $uri => $subject) { $this->manageIronPrefixes($uri, $prefixes); $schema .= "<" . $this->ironPrefixize($uri, $prefixes) . ">"; $schema .= "<description>" . $this->ws->xmlEncode($this->getDescription($subject)) . "</description>"; $schema .= "<prefLabel>" . $this->ws->xmlEncode($this->getLabel($uri, $subject)) . "</prefLabel>"; $schema .= "<type>" . Namespaces::$owl . "AnnotationProperty</type>"; foreach ($subject as $predicate => $values) { foreach ($values as $value) { switch ($predicate) { case Namespaces::$rdfs . "domain": $this->manageIronPrefixes($value["uri"], $prefixes); $schema .= "<allowedType>" . $this->ws->xmlEncode($this->ironPrefixize($value["uri"], $prefixes)) . "</allowedType>"; break; case Namespaces::$rdfs . "range": $this->manageIronPrefixes($value["uri"], $prefixes); $schema .= "<allowedValue><type>" . $this->ws->xmlEncode($this->ironPrefixize($value["uri"], $prefixes)) . "</type></allowedValue>"; break; case Namespaces::$sco . "displayControl": if (isset($value["uri"])) { $displayControl = substr($value["uri"], strripos($value["uri"], "#") + 1); } else { $displayControl = $value["value"]; } $schema .= "<displayControl>" . $this->ws->xmlEncode($displayControl) . "</displayControl>"; break; case Namespaces::$sco . "ignoredBy": if (isset($value["uri"])) { $ignoredBy = substr($value["uri"], strripos($value["uri"], "#") + 1); } else { $ignoredBy = $value["value"]; } $schema .= "<ignoredBy>" . $this->ws->xmlEncode($ignoredBy) . "</ignoredBy>"; break; case Namespaces::$sco . "comparableWith": $this->manageIronPrefixes($value["uri"], $prefixes); $schema .= "<comparableWith>" . $this->ws->xmlEncode($this->ironPrefixize($value["uri"], $prefixes)) . "</comparableWith>"; break; case Namespaces::$sco . "unitType": $this->manageIronPrefixes($value["uri"], $prefixes); $schema .= "<unitType>" . $this->ws->xmlEncode($this->ironPrefixize($value["uri"], $prefixes)) . "</unitType>"; break; case Namespaces::$sco . "shortLabel": $schema .= "<shortLabel>" . $this->ws->xmlEncode($value["value"]) . "</shortLabel>"; break; case Namespaces::$sco . "minCardinality": $schema .= "<minCardinality>" . $this->ws->xmlEncode($value["value"]) . "</minCardinality>"; break; case Namespaces::$sco . "maxCardinality": $schema .= "<maxCardinality>" . $this->ws->xmlEncode($value["value"]) . "</maxCardinality>"; break; case Namespaces::$sco . "cardinality": $schema .= "<cardinality>" . $this->ws->xmlEncode($value["value"]) . "</cardinality>"; break; case Namespaces::$sco . "orderingValue": $schema .= "<orderingValue>" . $this->ws->xmlEncode($value["value"]) . "</orderingValue>"; break; case Namespaces::$rdfs . "subPropertyOf": $this->manageIronPrefixes($value["uri"], $prefixes); $schema .= "<subPropertyOf>" . $this->ws->xmlEncode($this->ironPrefixize($value["uri"], $prefixes)) . "</subPropertyOf>"; break; case Namespaces::$iron . "allowedValue": $schema .= "<allowedValue><primitive>" . $this->ws->xmlEncode($value["value"]) . "</primitive></allowedValue>"; break; } } } $schema .= "</" . $this->ironPrefixize($uri, $prefixes) . ">"; } $subjectTriples = $ontology->getPropertiesDescription(FALSE, TRUE); foreach ($subjectTriples as $uri => $subject) { $this->manageIronPrefixes($uri, $prefixes); $schema .= "<" . $this->ironPrefixize($uri, $prefixes) . ">"; $schema .= "<description>" . $this->ws->xmlEncode($this->getDescription($subject)) . "</description>"; $schema .= "<prefLabel>" . $this->ws->xmlEncode($this->getLabel($uri, $subject)) . "</prefLabel>"; $schema .= "<type>" . Namespaces::$owl . "ObjectProperty</type>"; foreach ($subject as $predicate => $values) { foreach ($values as $value) { switch ($predicate) { case Namespaces::$rdfs . "domain": $this->manageIronPrefixes($value["uri"], $prefixes); $schema .= "<allowedType>" . $this->ws->xmlEncode($this->ironPrefixize($value["uri"], $prefixes)) . "</allowedType>"; break; case Namespaces::$rdfs . "range": $this->manageIronPrefixes($value["uri"], $prefixes); $schema .= "<allowedValue><type>" . $this->ws->xmlEncode($this->ironPrefixize($value["uri"], $prefixes)) . "</type></allowedValue>"; break; case Namespaces::$sco . "displayControl": if (isset($value["uri"])) { $displayControl = substr($value["uri"], strripos($value["uri"], "#") + 1); } else { $displayControl = $value["value"]; } $schema .= "<displayControl>" . $this->ws->xmlEncode($displayControl) . "</displayControl>"; break; case Namespaces::$sco . "ignoredBy": if (isset($value["uri"])) { $ignoredBy = substr($value["uri"], strripos($value["uri"], "#") + 1); } else { $ignoredBy = $value["value"]; } $schema .= "<ignoredBy>" . $this->ws->xmlEncode($ignoredBy) . "</ignoredBy>"; break; case Namespaces::$sco . "comparableWith": $this->manageIronPrefixes($value["uri"], $prefixes); $schema .= "<comparableWith>" . $this->ws->xmlEncode($this->ironPrefixize($value["uri"], $prefixes)) . "</comparableWith>"; break; case Namespaces::$sco . "shortLabel": $schema .= "<shortLabel>" . $this->ws->xmlEncode($value["value"]) . "</shortLabel>"; break; case Namespaces::$sco . "minCardinality": $schema .= "<minCardinality>" . $this->ws->xmlEncode($value["value"]) . "</minCardinality>"; break; case Namespaces::$sco . "maxCardinality": $schema .= "<maxCardinality>" . $this->ws->xmlEncode($value["value"]) . "</maxCardinality>"; break; case Namespaces::$sco . "cardinality": $schema .= "<cardinality>" . $this->ws->xmlEncode($value["value"]) . "</cardinality>"; break; case Namespaces::$sco . "unitType": $this->manageIronPrefixes($value["uri"], $prefixes); $schema .= "<unitType>" . $this->ws->xmlEncode($this->ironPrefixize($value["uri"], $prefixes)) . "</unitType>"; break; case Namespaces::$sco . "orderingValue": $schema .= "<orderingValue>" . $this->ws->xmlEncode($value["value"]) . "</orderingValue>"; break; case Namespaces::$iron . "allowedValue": $schema .= "<allowedValue><primitive>" . $this->ws->xmlEncode($value["value"]) . "</primitive></allowedValue>"; break; } } } $schema .= "</" . $this->ironPrefixize($uri, $prefixes) . ">"; } $schema .= "</attributeList>"; $schema .= "<prefixList>"; foreach ($prefixes as $prefix => $ns) { $schema .= " <{$prefix}>{$ns}</{$prefix}>"; } $schema .= "</prefixList>"; $schema .= "</schema>"; $subjectTriples = ""; $subject = new Subject($this->ws->ontologyUri); $subject->setType("owl:Ontology"); $subject->setDataAttribute(Namespaces::$wsf . "serializedIronXMLSchema", str_replace('&', '&amp;', str_replace(array("\\", "&", "<", ">"), array("%5C", "&", "<", ">"), $schema))); $this->ws->rset->addSubject($subject); /* <schema> <version>0.1</version> <prefLabel>PEG schema</prefLabel> <prefixList> <sco>http://purl.org/ontology/sco#</sco> </prefixList> <typeList> <peg_Neighborhood> <subTypeOf>pegf_Organization</subTypeOf> <description>Neighborhood community organization</description> <prefLabel>neighborhood</prefLabel> <displayControl>sRelationBrowser</displayControl> </peg_Neighborhood> </typeList> <attributeList> <peg_neighborhoodNumber> <prefLabel>neighborhood number</prefLabel> <description>Neighborhood identification number</description> <allowedType>Neighborhood</allowedType> <allowedType>City</allowedType> <allowedType>Province</allowedType> <allowedType>Country</allowedType> <allowedValue> <primitive>String</primitive> </allowedValue> <maxValues>1</maxValues> </peg_neighborhoodNumber> </attributeList> </schema> */ break; case "getironjsonschema": $subjectTriples = $ontology->getClassesDescription($limit, $offset); $schema = '{ "schema": { "version": "0.1", "typeList": {'; $prefixes = array(); foreach ($subjectTriples as $uri => $subject) { $this->manageIronPrefixes($uri, $prefixes); $schema .= '"' . $this->ironPrefixize($uri, $prefixes) . '": {'; $schema .= '"description": "' . $this->ws->jsonEncode($this->getDescription($subject)) . '",'; $schema .= '"prefLabel": "' . $this->ws->jsonEncode($this->getLabel($uri, $subject)) . '",'; foreach ($subject as $predicate => $values) { switch ($predicate) { case Namespaces::$rdfs . "subClassOf": $schema .= '"subTypeOf": ['; break; case Namespaces::$sco . "displayControl": $schema .= '"displayControl": ['; break; case Namespaces::$sco . "ignoredBy": $schema .= '"ignoredBy": ['; break; case Namespaces::$sco . "shortLabel": $schema .= '"shortLabel": ['; break; case Namespaces::$sco . "color": $schema .= '"color": ['; break; case Namespaces::$sco . "mapMarkerImageUrl": $schema .= '"mapMarkerImageUrl": ['; break; case Namespaces::$sco . "relationBrowserNodeType": $schema .= '"relationBrowserNodeType": ['; break; } foreach ($values as $value) { switch ($predicate) { case Namespaces::$rdfs . "subClassOf": $this->manageIronPrefixes($value["uri"], $prefixes); $schema .= '"' . $this->ws->jsonEncode($this->ironPrefixize($value["uri"], $prefixes)) . '",'; break; case Namespaces::$sco . "displayControl": if (isset($value["uri"])) { $displayControl = substr($value["uri"], strripos($value["uri"], "#") + 1); } else { $displayControl = $value["value"]; } $schema .= '"' . $this->ws->jsonEncode($displayControl) . '",'; break; case Namespaces::$sco . "ignoredBy": if (isset($value["uri"])) { $ignoredBy = substr($value["uri"], strripos($value["uri"], "#") + 1); } else { $ignoredBy = $value["value"]; } $schema .= '"' . $this->ws->jsonEncode($ignoredBy) . '",'; break; case Namespaces::$sco . "shortLabel": $schema .= '"' . $this->ws->jsonEncode($value["value"]) . '",'; break; case Namespaces::$sco . "color": $schema .= '"' . $this->ws->jsonEncode($value["value"]) . '",'; break; case Namespaces::$sco . "mapMarkerImageUrl": $schema .= '"' . $this->ws->jsonEncode($value["value"]) . '",'; break; case Namespaces::$sco . "relationBrowserNodeType": $this->manageIronPrefixes($value["uri"], $prefixes); $schema .= '"' . $this->ws->jsonEncode($this->ironPrefixize($value["uri"], $prefixes)) . '",'; break; } } switch ($predicate) { case Namespaces::$rdfs . "subClassOf": case Namespaces::$sco . "displayControl": case Namespaces::$sco . "ignoredBy": case Namespaces::$sco . "shortLabel": case Namespaces::$sco . "color": case Namespaces::$sco . "mapMarkerImageUrl": case Namespaces::$sco . "relationBrowserNodeType": $schema = rtrim($schema, ","); $schema .= '],'; break; } } $schema = rtrim($schema, ","); $schema .= "},"; } $schema = rtrim($schema, ","); $schema .= "},"; $schema .= '"attributeList": {'; $subjectTriples = $ontology->getPropertiesDescription(TRUE); foreach ($subjectTriples as $uri => $subject) { $this->manageIronPrefixes($uri, $prefixes); $schema .= '"' . $this->ironPrefixize($uri, $prefixes) . '": {'; $schema .= '"description": "' . $this->ws->jsonEncode($this->getDescription($subject)) . '",'; $schema .= '"prefLabel": "' . $this->ws->jsonEncode($this->getLabel($uri, $subject)) . '",'; $schema .= '"type": "' . Namespaces::$owl . 'DatatypeProperty",'; foreach ($subject as $predicate => $values) { switch ($predicate) { case Namespaces::$iron . "allowedValue": $schema .= '"allowedValue": {"primitive": "' . $this->ws->jsonEncode($value["value"]) . '"},'; break; case Namespaces::$rdfs . "subPropertyOf": $schema .= '"subPropertyOf": ['; break; case Namespaces::$rdfs . "domain": $schema .= '"allowedType": ['; break; case Namespaces::$rdfs . "range": $schema .= '"allowedValue": ['; break; case Namespaces::$sco . "displayControl": $schema .= '"displayControl": ['; break; case Namespaces::$sco . "ignoredBy": $schema .= '"ignoredBy": ['; break; case Namespaces::$sco . "comparableWith": $schema .= '"comparableWith": ['; break; case Namespaces::$sco . "unitType": $schema .= '"unitType": ['; break; case Namespaces::$sco . "shortLabel": $schema .= '"shortLabel": ['; break; case Namespaces::$sco . "orderingValue": $schema .= '"orderingValue": ['; break; case Namespaces::$rdfs . "subPropertyOf": $schema .= '"subPropertyOf": ['; break; } foreach ($values as $value) { switch ($predicate) { case Namespaces::$sco . "minCardinality": $schema .= '"minCardinality": "' . $this->ws->jsonEncode($value["value"]) . '",'; break; case Namespaces::$sco . "maxCardinality": $schema .= '"maxCardinality": "' . $this->ws->jsonEncode($value["value"]) . '",'; break; case Namespaces::$sco . "cardinality": $schema .= '"cardinality": "' . $this->ws->jsonEncode($value["value"]) . '",'; break; case Namespaces::$rdfs . "domain": $this->manageIronPrefixes($value["uri"], $prefixes); $schema .= '"' . $this->ws->jsonEncode($this->ironPrefixize($value["uri"], $prefixes)) . '",'; break; case Namespaces::$rdfs . "range": $this->manageIronPrefixes($value["uri"], $prefixes); $schema .= '{ "type": "' . $this->ws->jsonEncode($this->ironPrefixize($value["uri"], $prefixes)) . '"},'; break; case Namespaces::$sco . "displayControl": if (isset($value["uri"])) { $displayControl = substr($value["uri"], strripos($value["uri"], "#") + 1); } else { $displayControl = $value["value"]; } $schema .= '"' . $this->ws->jsonEncode($displayControl) . '",'; break; case Namespaces::$sco . "ignoredBy": if (isset($value["uri"])) { $ignoredBy = substr($value["uri"], strripos($value["uri"], "#") + 1); } else { $ignoredBy = $value["value"]; } $schema .= '"' . $this->ws->jsonEncode($ignoredBy) . '",'; break; case Namespaces::$sco . "comparableWith": $this->manageIronPrefixes($value["uri"], $prefixes); $schema .= '"' . $this->ws->jsonEncode($this->ironPrefixize($value["uri"], $prefixes)) . '",'; break; case Namespaces::$sco . "unitType": $this->manageIronPrefixes($value["uri"], $prefixes); $schema .= '"' . $this->ws->jsonEncode($this->ironPrefixize($value["uri"], $prefixes)) . '",'; break; case Namespaces::$sco . "shortLabel": $schema .= '"' . $this->ws->jsonEncode($value["value"]) . '",'; break; case Namespaces::$sco . "orderingValue": $schema .= '"' . $this->ws->jsonEncode($value["value"]) . '",'; break; case Namespaces::$rdfs . "subPropertyOf": $this->manageIronPrefixes($value["uri"], $prefixes); $schema .= '"' . $this->ws->jsonEncode($this->ironPrefixize($value["uri"], $prefixes)) . '",'; break; } } switch ($predicate) { case Namespaces::$rdfs . "domain": case Namespaces::$rdfs . "range": case Namespaces::$sco . "displayControl": case Namespaces::$sco . "ignoredBy": case Namespaces::$sco . "comparableWith": case Namespaces::$sco . "unitType": case Namespaces::$sco . "shortLabel": case Namespaces::$sco . "orderingValue": case Namespaces::$rdfs . "subPropertyOf": $schema = rtrim($schema, ","); $schema .= '],'; break; } } $schema = rtrim($schema, ","); $schema .= "},"; } $subjectTriples = $ontology->getPropertiesDescription(FALSE, FALSE, TRUE); foreach ($subjectTriples as $uri => $subject) { $this->manageIronPrefixes($uri, $prefixes); $schema .= '"' . $this->ironPrefixize($uri, $prefixes) . '": {'; $schema .= '"description": "' . $this->ws->jsonEncode($this->getDescription($subject)) . '",'; $schema .= '"prefLabel": "' . $this->ws->jsonEncode($this->getLabel($uri, $subject)) . '",'; $schema .= '"type": "' . Namespaces::$owl . 'AnnotationProperty",'; foreach ($subject as $predicate => $values) { switch ($predicate) { case Namespaces::$rdfs . "domain": $schema .= '"allowedType": ['; break; case Namespaces::$rdfs . "range": $schema .= '"allowedValue": ['; break; case Namespaces::$iron . "allowedValue": $schema .= '"allowedValue": {"primitive": "' . $this->ws->jsonEncode($value["value"]) . '"},'; break; case Namespaces::$rdfs . "subPropertyOf": $schema .= '"subPropertyOf": ['; break; case Namespaces::$sco . "displayControl": $schema .= '"displayControl": ['; break; case Namespaces::$sco . "ignoredBy": $schema .= '"ignoredBy": ['; break; case Namespaces::$sco . "comparableWith": $schema .= '"comparableWith": ['; break; case Namespaces::$sco . "unitType": $schema .= '"unitType": ['; break; case Namespaces::$sco . "shortLabel": $schema .= '"shortLabel": ['; break; case Namespaces::$sco . "orderingValue": $schema .= '"orderingValue": ['; break; case Namespaces::$rdfs . "subPropertyOf": $schema .= '"subPropertyOf": ['; break; } foreach ($values as $value) { switch ($predicate) { case Namespaces::$rdfs . "domain": $this->manageIronPrefixes($value["uri"], $prefixes); $schema .= '"' . $this->ws->jsonEncode($this->ironPrefixize($value["uri"], $prefixes)) . '",'; break; case Namespaces::$rdfs . "range": $this->manageIronPrefixes($value["uri"], $prefixes); $schema .= '{ "type": "' . $this->ws->jsonEncode($this->ironPrefixize($value["uri"], $prefixes)) . '"},'; break; case Namespaces::$sco . "minCardinality": $schema .= '"minCardinality": "' . $this->ws->jsonEncode($value["value"]) . '",'; break; case Namespaces::$sco . "maxCardinality": $schema .= '"maxCardinality": "' . $this->ws->jsonEncode($value["value"]) . '",'; break; case Namespaces::$sco . "cardinality": $schema .= '"cardinality": "' . $this->ws->jsonEncode($value["value"]) . '",'; break; case Namespaces::$sco . "displayControl": if (isset($value["uri"])) { $displayControl = substr($value["uri"], strripos($value["uri"], "#") + 1); } else { $displayControl = $value["value"]; } $schema .= '"' . $this->ws->jsonEncode($displayControl) . '",'; break; case Namespaces::$sco . "ignoredBy": if (isset($value["uri"])) { $ignoredBy = substr($value["uri"], strripos($value["uri"], "#") + 1); } else { $ignoredBy = $value["value"]; } $schema .= '"' . $this->ws->jsonEncode($ignoredBy) . '",'; break; case Namespaces::$sco . "comparableWith": $this->manageIronPrefixes($value["uri"], $prefixes); $schema .= '"' . $this->ws->jsonEncode($this->ironPrefixize($value["uri"], $prefixes)) . '",'; break; case Namespaces::$sco . "unitType": $this->manageIronPrefixes($value["uri"], $prefixes); $schema .= '"' . $this->ws->jsonEncode($this->ironPrefixize($value["uri"], $prefixes)) . '",'; break; case Namespaces::$sco . "shortLabel": $schema .= '"' . $this->ws->jsonEncode($value["value"]) . '",'; break; case Namespaces::$sco . "orderingValue": $schema .= '"' . $this->ws->jsonEncode($value["value"]) . '",'; break; case Namespaces::$rdfs . "subPropertyOf": $this->manageIronPrefixes($value["uri"], $prefixes); $schema .= '"' . $this->ws->jsonEncode($this->ironPrefixize($value["uri"], $prefixes)) . '",'; break; } } switch ($predicate) { case Namespaces::$rdfs . "domain": case Namespaces::$rdfs . "range": case Namespaces::$sco . "displayControl": case Namespaces::$sco . "ignoredBy": case Namespaces::$sco . "comparableWith": case Namespaces::$sco . "unitType": case Namespaces::$sco . "shortLabel": case Namespaces::$sco . "orderingValue": case Namespaces::$rdfs . "subPropertyOf": $schema = rtrim($schema, ","); $schema .= '],'; break; } } $schema = rtrim($schema, ","); $schema .= "},"; } $subjectTriples = $ontology->getPropertiesDescription(FALSE, TRUE); foreach ($subjectTriples as $uri => $subject) { $this->manageIronPrefixes($uri, $prefixes); $schema .= '"' . $this->ironPrefixize($uri, $prefixes) . '": {'; $schema .= '"description": "' . $this->ws->jsonEncode($this->getDescription($subject)) . '",'; $schema .= '"prefLabel": "' . $this->ws->jsonEncode($this->getLabel($uri, $subject)) . '",'; $schema .= '"type": "' . Namespaces::$owl . 'ObjectProperty",'; foreach ($subject as $predicate => $values) { switch ($predicate) { case Namespaces::$rdfs . "domain": $schema .= '"allowedType": ['; break; case Namespaces::$rdfs . "range": $schema .= '"allowedValue": ['; break; case Namespaces::$sco . "displayControl": $schema .= '"displayControl": ['; break; case Namespaces::$sco . "ignoredBy": $schema .= '"ignoredBy": ['; break; case Namespaces::$sco . "comparableWith": $schema .= '"comparableWith": ['; break; case Namespaces::$sco . "unitType": $schema .= '"unitType": ['; break; case Namespaces::$sco . "shortLabel": $schema .= '"shortLabel": ['; break; case Namespaces::$sco . "orderingValue": $schema .= '"orderingValue": ['; break; case Namespaces::$rdfs . "subPropertyOf": $schema .= '"subPropertyOf": ['; break; } foreach ($values as $value) { switch ($predicate) { case Namespaces::$iron . "allowedValue": $schema .= '{"primitive": "' . $this->ws->jsonEncode($value["value"]) . '"},'; break; case Namespaces::$rdfs . "domain": $this->manageIronPrefixes($value["uri"], $prefixes); $schema .= '"' . $this->ws->jsonEncode($this->ironPrefixize($value["uri"], $prefixes)) . '",'; break; case Namespaces::$rdfs . "range": $this->manageIronPrefixes($value["uri"], $prefixes); $schema .= '{ "type": "' . $this->ws->jsonEncode($this->ironPrefixize($value["uri"], $prefixes)) . '"},'; break; case Namespaces::$sco . "displayControl": if (isset($value["uri"])) { $displayControl = substr($value["uri"], strripos($value["uri"], "#") + 1); } else { $displayControl = $value["value"]; } $schema .= '"' . $this->ws->jsonEncode($displayControl) . '",'; break; case Namespaces::$sco . "ignoredBy": if (isset($value["uri"])) { $ignoredBy = substr($value["uri"], strripos($value["uri"], "#") + 1); } else { $ignoredBy = $value["value"]; } $schema .= '"' . $this->ws->jsonEncode($ignoredBy) . '",'; break; case Namespaces::$sco . "comparableWith": $this->manageIronPrefixes($value["uri"], $prefixes); $schema .= '"' . $this->ws->jsonEncode($this->ironPrefixize($value["uri"], $prefixes)) . '",'; break; case Namespaces::$sco . "shortLabel": $schema .= '"' . $this->ws->jsonEncode($value["value"]) . '",'; break; case Namespaces::$sco . "unitType": $this->manageIronPrefixes($value["uri"], $prefixes); $schema .= '"' . $this->ws->jsonEncode($this->ironPrefixize($value["uri"], $prefixes)) . '",'; break; case Namespaces::$sco . "orderingValue": $schema .= '"' . $this->ws->jsonEncode($value["value"]) . '",'; break; case Namespaces::$rdfs . "subPropertyOf": $this->manageIronPrefixes($value["uri"], $prefixes); $schema .= '"' . $this->ws->jsonEncode($this->ironPrefixize($value["uri"], $prefixes)) . '",'; break; } } switch ($predicate) { case Namespaces::$rdfs . "domain": case Namespaces::$rdfs . "range": case Namespaces::$sco . "displayControl": case Namespaces::$sco . "ignoredBy": case Namespaces::$sco . "comparableWith": case Namespaces::$sco . "unitType": case Namespaces::$sco . "shortLabel": case Namespaces::$sco . "orderingValue": case Namespaces::$rdfs . "subPropertyOf": $schema = rtrim($schema, ","); $schema .= '],'; break; } } $schema = rtrim($schema, ","); $schema .= "},"; } $schema = rtrim($schema, ","); $schema .= "},"; $schema .= '"prefixList": {'; foreach ($prefixes as $prefix => $ns) { $schema .= " \"{$prefix}\": \"{$ns}\","; } $schema = rtrim($schema, ","); $schema .= "}"; $schema .= "}"; $schema .= "}"; $subjectTriples = ""; $subject = new Subject($this->ws->ontologyUri); $subject->setType("owl:Ontology"); $subject->setDataAttribute(Namespaces::$wsf . "serializedIronJSONSchema", $schema); $this->ws->rset->addSubject($subject); /* { "schema": { "version": "0.1", "typeList": { "bibo_ThesisDegree": { "description": "The academic degree of a Thesis", "prefLabel": "Thesis degree", "subTypeOf": [ "owl_Thing" ] }, "0_1_Agent": { "description": "No description available", "prefLabel": "Agent", "subTypeOf": [ "owl_Thing" ] }, "bibo_Event": { "description": "No description available", "prefLabel": "Event", "subTypeOf": [ "owl_Thing" ] } }, "attributeList": { "bibo_sici": { "description": "No description available", "prefLabel": "sici", "allowedValue": { "primitive": "String" }, "subPropertyOf": [ "bibo_identifier" ] }, "terms_rights": { "description": "No description available", "prefLabel": "rights", "subPropertyOf": [ "owl_topObjectProperty" ] }, "0_1_based_near": { "description": "No description available", "prefLabel": "based_near", "subPropertyOf": [ "owl_topObjectProperty" ] } }, "prefixList": { "bibo": "http://purl.org/ontology/bibo/", "owl": "http://www.w3.org/2002/07/owl#", "0_1": "http://xmlns.com/foaf/0.1/", "event_owl": "http://purl.org/NET/c4dm/event.owl#", "rdf_schema": "http://www.w3.org/2000/01/rdf-schema#", "22_rdf_syntax_ns": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", "terms": "http://purl.org/dc/terms/", "basic": "http://prismstandard.org/namespaces/1.2/basic/", "schema": "http://schemas.talis.com/2005/address/schema#" } } } */ break; case "getproperty": if (!isset($this->ws->parameters["uri"]) || $this->ws->parameters["uri"] == "") { $this->returnError(400, "Bad Request", "_202"); return; } $property = $ontology->_getProperty($this->ws->parameters["uri"]); if ($property == NULL) { $this->returnError(400, "Bad Request", "_204"); } else { $subject = new Subject($this->ws->parameters["uri"]); $subject->setSubject($ontology->_getPropertyDescription($property)); $this->ws->rset->addSubject($subject); } break; case "getproperties": $limit = -1; $offset = 0; if (isset($this->ws->parameters["limit"])) { $limit = $this->ws->parameters["limit"]; } if (isset($this->ws->parameters["offset"])) { $offset = $this->ws->parameters["offset"]; } switch (strtolower($this->ws->parameters["mode"])) { case "uris": switch (strtolower($this->ws->parameters["type"])) { case "dataproperty": $properties = $ontology->getPropertiesUri(TRUE, FALSE, FALSE, $limit, $offset); foreach ($properties as $property) { $subject = new Subject($property); $subject->setType("owl:DatatypeProperty"); $this->ws->rset->addSubject($subject); } break; case "objectproperty": $properties = $ontology->getPropertiesUri(FALSE, TRUE, FALSE, $limit, $offset); foreach ($properties as $property) { $subject = new Subject($property); $subject->setType("owl:ObjectProperty"); $this->ws->rset->addSubject($subject); } break; case "annotationproperty": $properties = $ontology->getPropertiesUri(FALSE, FALSE, TRUE, $limit, $offset); foreach ($properties as $property) { $subject = new Subject($property); $subject->setType("owl:AnnotationProperty"); $this->ws->rset->addSubject($subject); } break; default: $this->returnError(400, "Bad Request", "_203"); return; break; } break; case "descriptions": switch (strtolower($this->ws->parameters["type"])) { case "dataproperty": $this->ws->rset->setResultset(array($this->ws->ontologyUri => $ontology->getPropertiesDescription(TRUE, FALSE, FALSE, $limit, $offset))); break; case "objectproperty": $this->ws->rset->setResultset(array($this->ws->ontologyUri => $ontology->getPropertiesDescription(FALSE, TRUE, FALSE, $limit, $offset))); break; case "annotationproperty": $this->ws->rset->setResultset(array($this->ws->ontologyUri => $ontology->getPropertiesDescription(FALSE, FALSE, TRUE, $limit, $offset))); break; case "all": // @TODO: property handle possible punned properties (properties that have the same URI but that are of different property types) $subjectTriples = array(); $subjectTriples = array_merge($subjectTriples, $ontology->getPropertiesDescription(TRUE, FALSE, FALSE, $limit, $offset)); $subjectTriples = array_merge($subjectTriples, $ontology->getPropertiesDescription(FALSE, TRUE, FALSE, $limit, $offset)); // Check if the annotatio properties got punned. If they did, then ignore returning the annotation property. $annotationProperties = $ontology->getPropertiesDescription(FALSE, FALSE, TRUE, $limit, $offset); foreach ($annotationProperties as $uri => $property) { if (!isset($subjectTriples[$uri])) { $subjectTriples[$uri] = $property; } } $this->ws->rset->setResultset(array($this->ws->ontologyUri => $subjectTriples)); break; default: $this->returnError(400, "Bad Request", "_203"); return; break; } break; default: $this->returnError(400, "Bad Request", "_201"); return; break; } break; case "getsubproperties": if (!isset($this->ws->parameters["uri"]) || $this->ws->parameters["uri"] == "") { $this->returnError(400, "Bad Request", "_202"); return; } switch (strtolower($this->ws->parameters["mode"])) { case "uris": switch (strtolower($this->ws->parameters["type"])) { case "dataproperty": $properties = $ontology->getSubPropertiesUri((string) $this->ws->parameters["uri"], $this->ws->parameters["direct"], TRUE); foreach ($properties as $property) { $subject = new Subject($property); $subject->setType("owl:DatatypeProperty"); $this->ws->rset->addSubject($subject); } break; case "objectproperty": $properties = $ontology->getSubPropertiesUri((string) $this->ws->parameters["uri"], $this->ws->parameters["direct"], FALSE); foreach ($properties as $property) { $subject = new Subject($property); $subject->setType("owl:ObjectProperty"); $this->ws->rset->addSubject($subject); } break; default: $this->returnError(400, "Bad Request", "_203"); return; break; } break; case "descriptions": switch (strtolower($this->ws->parameters["type"])) { case "dataproperty": $this->ws->rset->setResultset(array($this->ws->ontologyUri => $ontology->getSubPropertiesDescription((string) $this->ws->parameters["uri"], $this->ws->parameters["direct"], TRUE))); break; case "objectproperty": $this->ws->rset->setResultset(array($this->ws->ontologyUri => $ontology->getSubPropertiesDescription((string) $this->ws->parameters["uri"], $this->ws->parameters["direct"], FALSE))); break; default: $this->returnError(400, "Bad Request", "_203"); return; break; } break; default: $this->returnError(400, "Bad Request", "_201"); return; break; } break; case "getsuperproperties": if (!isset($this->ws->parameters["uri"]) || $this->ws->parameters["uri"] == "") { $this->returnError(400, "Bad Request", "_202"); return; } switch (strtolower($this->ws->parameters["mode"])) { case "uris": switch (strtolower($this->ws->parameters["type"])) { case "dataproperty": $properties = $ontology->getSuperPropertiesUri((string) $this->ws->parameters["uri"], $this->ws->parameters["direct"], TRUE); foreach ($properties as $property) { $subject = new Subject($property); $subject->setType("owl:DatatypeProperty"); $this->ws->rset->addSubject($subject); } break; case "objectproperty": $properties = $ontology->getSuperPropertiesUri((string) $this->ws->parameters["uri"], $this->ws->parameters["direct"], FALSE); foreach ($properties as $property) { $subject = new Subject($property); $subject->setType("owl:ObjectProperty"); $this->ws->rset->addSubject($subject); } break; default: $this->returnError(400, "Bad Request", "_203"); return; break; } break; case "descriptions": switch (strtolower($this->ws->parameters["type"])) { case "dataproperty": $this->ws->rset->setResultset(array($this->ws->ontologyUri => $ontology->getSuperPropertiesDescription((string) $this->ws->parameters["uri"], $this->ws->parameters["direct"], TRUE))); break; case "objectproperty": $this->ws->rset->setResultset(array($this->ws->ontologyUri => $ontology->getSuperPropertiesDescription((string) $this->ws->parameters["uri"], $this->ws->parameters["direct"], FALSE))); break; default: $this->returnError(400, "Bad Request", "_203"); return; break; } break; default: $this->returnError(400, "Bad Request", "_201"); return; break; } break; case "getequivalentproperties": if (!isset($this->ws->parameters["uri"]) || $this->ws->parameters["uri"] == "") { $this->returnError(400, "Bad Request", "_202"); return; } switch (strtolower($this->ws->parameters["mode"])) { case "uris": switch (strtolower($this->ws->parameters["type"])) { case "dataproperty": $properties = $ontology->getEquivalentPropertiesUri((string) $this->ws->parameters["uri"], TRUE); foreach ($properties as $property) { $subject = new Subject($property); $subject->setType("owl:DatatypeProperty"); $this->ws->rset->addSubject($subject); } break; case "objectproperty": $properties = $ontology->getEquivalentPropertiesUri((string) $this->ws->parameters["uri"], FALSE); foreach ($properties as $property) { $subject = new Subject($property); $subject->setType("owl:ObjectProperty"); $this->ws->rset->addSubject($subject); } break; default: $this->returnError(400, "Bad Request", "_203"); return; break; } break; case "descriptions": switch (strtolower($this->ws->parameters["type"])) { case "dataproperty": $this->ws->rset->setResultset(array($this->ws->ontologyUri => $ontology->getEquivalentPropertiesDescription((string) $this->ws->parameters["uri"], TRUE))); break; case "objectproperty": $this->ws->rset->setResultset(array($this->ws->ontologyUri => $ontology->getEquivalentPropertiesDescription((string) $this->ws->parameters["uri"], FALSE))); break; default: $this->returnError(400, "Bad Request", "_203"); return; break; } break; default: $this->returnError(400, "Bad Request", "_201"); return; break; } break; case "getdisjointproperties": if (!isset($this->ws->parameters["uri"]) || $this->ws->parameters["uri"] == "") { $this->returnError(400, "Bad Request", "_202"); return; } switch (strtolower($this->ws->parameters["mode"])) { case "uris": switch (strtolower($this->ws->parameters["type"])) { case "dataproperty": $properties = $ontology->getDisjointPropertiesUri((string) $this->ws->parameters["uri"], TRUE); foreach ($properties as $property) { $subject = new Subject($property); $subject->setType("owl:DatatypeProperty"); $this->ws->rset->addSubject($subject); } break; case "objectproperty": $properties = $ontology->getDisjointPropertiesUri((string) $this->ws->parameters["uri"], FALSE); foreach ($properties as $property) { $subject = new Subject($property); $subject->setType("owl:ObjectProperty"); $this->ws->rset->addSubject($subject); } break; default: $this->returnError(400, "Bad Request", "_203"); return; break; } break; case "descriptions": switch (strtolower($this->ws->parameters["type"])) { case "dataproperty": $this->ws->rset->setResultset(array($this->ws->ontologyUri => $ontology->getDisjointPropertiesDescription((string) $this->ws->parameters["uri"], TRUE))); break; case "objectproperty": $this->ws->rset->setResultset(array($this->ws->ontologyUri => $ontology->getDisjointPropertiesDescription((string) $this->ws->parameters["uri"], FALSE))); break; default: $this->returnError(400, "Bad Request", "_203"); return; break; } break; default: $this->returnError(400, "Bad Request", "_201"); return; break; } break; default: $this->ws->conneg->setStatus(400); $this->ws->conneg->setStatusMsg("Bad Request"); $this->ws->conneg->setStatusMsgExt($this->ws->errorMessenger->_200->name); $this->ws->conneg->setError($this->ws->errorMessenger->_200->id, $this->ws->errorMessenger->ws, $this->ws->errorMessenger->_200->name, $this->ws->errorMessenger->_200->description, "This function is not defined\n for this endpoint:" . $this->ws->function, $this->ws->errorMessenger->_200->level); return; break; } } }
/** Update all ontological structures used by the WSF @author Frederick Giasson, Structured Dynamics LLC. */ public function createOntology() { // Make sure there was no conneg error prior to this process call if ($this->ws->conneg->getStatus() == 200) { $this->ws->validateQuery(); // If the query is still valid if ($this->ws->conneg->getStatus() == 200) { // Starts the OWLAPI process/bridge require_once $this->ws->owlapiBridgeURI; // Create the OWLAPI session object that could have been persisted on the OWLAPI instance. // Second param "false" => we re-use the pre-created session without destroying the previous one // third param "0" => it nevers timeout. $OwlApiSession = java_session("OWLAPI", false, 0); $register = java_values($OwlApiSession->get("ontologiesRegister")); // Check if the ontology is already existing if (!is_null(java_values($OwlApiSession->get($this->getOntologySessionID($this->ws->ontologyUri)))) || $register != NULL && array_search($this->getOntologySessionID($this->ws->ontologyUri), $register) !== FALSE) { $this->ws->returnError(400, "Bad Request", "_302", ""); return; } try { $ontology = new OWLOntology($this->ws->ontologyUri, $OwlApiSession, FALSE); if (strtolower($this->ws->owlapiReasoner) == "pellet") { $ontology->usePelletReasoner(); } elseif (strtolower($this->ws->owlapiReasoner) == "hermit") { $ontology->useHermitReasoner(); } elseif (strtolower($this->ws->owlapiReasoner) == "factpp") { $ontology->useFactppReasoner(); } } catch (Exception $e) { $this->ws->returnError(400, "Bad Request", "_300", (string) java_values($e)); return; } // Get the description of the ontology $ontologyDescription = $ontology->getOntologyDescription(); $ontologyName = $this->getLabel($this->ws->ontologyUri, $ontologyDescription); $ontologyDescription = $this->getDescription($ontologyDescription); // Get the list of webservices that will be accessible for this ontology dataset. $authLister = new AuthLister("ws", $this->ws->ontologyUri, $this->ws->requester_ip, $this->ws->wsf_local_ip); $authLister->pipeline_conneg($this->ws->conneg->getAccept(), $this->ws->conneg->getAcceptCharset(), $this->ws->conneg->getAcceptEncoding(), $this->ws->conneg->getAcceptLanguage()); $authLister->process(); if ($authLister->pipeline_getResponseHeaderStatus() != 200) { $this->ws->conneg->setStatus($authLister->pipeline_getResponseHeaderStatus()); $this->ws->conneg->setStatusMsg($authLister->pipeline_getResponseHeaderStatusMsg()); $this->ws->conneg->setStatusMsgExt($authLister->pipeline_getResponseHeaderStatusMsgExt()); $this->ws->conneg->setError($authLister->pipeline_getError()->id, $authLister->pipeline_getError()->webservice, $authLister->pipeline_getError()->name, $authLister->pipeline_getError()->description, $authLister->pipeline_getError()->debugInfo, $authLister->pipeline_getError()->level); return; } /* Get all web services */ $webservices = ""; $xml = new ProcessorXML(); $xml->loadXML($authLister->pipeline_getResultset()); $webServiceElements = $xml->getXPath('//predicate/object[attribute::type="wsf:WebService"]'); foreach ($webServiceElements as $element) { if (stristr($xml->getURI($element), "/wsf/ws/search/") !== FALSE || stristr($xml->getURI($element), "/wsf/ws/browse/") !== FALSE || stristr($xml->getURI($element), "/wsf/ws/sparql/") !== FALSE || stristr($xml->getURI($element), "/wsf/ws/crud/create/") !== FALSE || stristr($xml->getURI($element), "/wsf/ws/crud/update/") !== FALSE || stristr($xml->getURI($element), "/wsf/ws/crud/delete/") !== FALSE || stristr($xml->getURI($element), "/wsf/ws/crud/read/") !== FALSE || stristr($xml->getURI($element), "/wsf/ws/ontology/create/") !== FALSE || stristr($xml->getURI($element), "/wsf/ws/ontology/read/") !== FALSE || stristr($xml->getURI($element), "/wsf/ws/ontology/update/") !== FALSE || stristr($xml->getURI($element), "/wsf/ws/ontology/delete/") !== FALSE) { $webservices .= $xml->getURI($element) . ";"; } } $webservices = rtrim($webservices, ";"); unset($xml); unset($authLister); // Create a new dataset for this ontology $globalPermissions = ""; if ($this->ws->globalPermissionCreate === FALSE) { $globalPermissions .= "False;"; } else { $globalPermissions .= "True;"; } if ($this->ws->globalPermissionRead === FALSE) { $globalPermissions .= "False;"; } else { $globalPermissions .= "True;"; } if ($this->ws->globalPermissionUpdate === FALSE) { $globalPermissions .= "False;"; } else { $globalPermissions .= "True;"; } if ($this->ws->globalPermissionDelete === FALSE) { $globalPermissions .= "False"; } else { $globalPermissions .= "True"; } $datasetCreate = new DatasetCreate($this->ws->ontologyUri, $ontologyName, $ontologyDescription, "", $this->ws->registered_ip, $this->ws->requester_ip, $webservices, $globalPermissions); $datasetCreate->ws_conneg($_SERVER['HTTP_ACCEPT'], $_SERVER['HTTP_ACCEPT_CHARSET'], $_SERVER['HTTP_ACCEPT_ENCODING'], $_SERVER['HTTP_ACCEPT_LANGUAGE']); $datasetCreate->process(); if ($datasetCreate->pipeline_getResponseHeaderStatus() != 200) { if ($datasetCreate->pipeline_getError()->id != "WS-DATASET-CREATE-202") { $this->ws->conneg->setStatus($datasetCreate->pipeline_getResponseHeaderStatus()); $this->ws->conneg->setStatusMsg($datasetCreate->pipeline_getResponseHeaderStatusMsg()); $this->ws->conneg->setStatusMsgExt($datasetCreate->pipeline_getResponseHeaderStatusMsgExt()); $this->ws->conneg->setError($datasetCreate->pipeline_getError()->id, $datasetCreate->pipeline_getError()->webservice, $datasetCreate->pipeline_getError()->name, $datasetCreate->pipeline_getError()->description, $datasetCreate->pipeline_getError()->debugInfo, $datasetCreate->pipeline_getError()->level); } // If the dataset already exists, then we simply stop the processing of the advancedIndexation // mode. This means that the tomcat instance has been rebooted, and that the datasets // have been leaved there, and that a procedure, normally using the advancedIndexation mode // is currently being re-processed. return; } unset($datasetCreate); // Tag the new dataset as being a dataset that host an ontology description $query = "insert into <" . $this->ws->wsf_graph . "datasets/>\n {\n <" . $this->ws->ontologyUri . "> <http://purl.org/ontology/wsf#holdOntology> \"true\" .\n }"; @$this->ws->db->query($this->ws->db->build_sparql_query(str_replace(array("\n", "\r", "\t"), " ", $query), array(), FALSE)); if (odbc_error()) { $this->ws->conneg->setStatus(500); $this->ws->conneg->setStatusMsg("Internal Error"); $this->ws->conneg->setStatusMsgExt($this->ws->errorMessenger->_301->name); $this->ws->conneg->setError($this->ws->errorMessenger->_301->id, $this->ws->errorMessenger->ws, $this->ws->errorMessenger->_301->name, $this->ws->errorMessenger->_301->description, odbc_errormsg(), $this->ws->errorMessenger->_301->level); return; } // Check if we want to enable the advanced indexation: so, if we want to import all the ontologies // description into the other structWSF data stores to enable search and filtering using the other // endpoints such as search, sparql, read, etc. if ($this->ws->advancedIndexation) { // Once we start the ontology creation process, we have to make sure that even if the server // loose the connection with the user the process will still finish. ignore_user_abort(true); // However, maybe there is an issue with the server handling that file tht lead to some kind of infinite // or near infinite loop; so we have to limit the execution time of this procedure to 45 mins. set_time_limit(86400); // Get the description of the classes, properties and named individuals of this ontology. // Check the size of the Ontology file to import. If the size is bigger than 8MB, then we will // use another method that incurs some Virtuoso indexing. If it is the case, you have to make sure // that Virtuoso is properly configured so that it can access (DirsAllowed Virtuoso config option) // the folder where the ontology file has been saved. if (filesize($this->ws->ontologyUri) > 8000000) { $sliceSize = 100; // Import the big file into Virtuoso $sqlQuery = "DB.DBA.RDF_LOAD_RDFXML_MT(file_to_string_output('" . str_replace("file://localhost", "", $this->ws->ontologyUri) . "'),'" . $this->ws->ontologyUri . "/import','" . $this->ws->ontologyUri . "/import')"; $resultset = $this->ws->db->query($sqlQuery); if (odbc_error()) { // If there is an error, try to load it using the Turtle parser $sqlQuery = "DB.DBA.TTLP_MT(file_to_string_output('" . str_replace("file://localhost", "", $this->ws->ontologyUri) . "'),'" . $this->ws->ontologyUri . "/import','" . $this->ws->ontologyUri . "/import')"; $resultset = $this->ws->db->query($sqlQuery); if (odbc_error()) { // echo "Error: can't import the file: $file, into the triple store.\n"; // return; } } unset($resultset); // count the number of records $sparqlQuery = "\n \n select count(distinct ?s) as ?nb from <" . $this->ws->ontologyUri . "/import>\n where\n {\n ?s a ?o .\n }\n \n "; $resultset = $this->ws->db->query($this->ws->db->build_sparql_query($sparqlQuery, array('nb'), FALSE)); $nb = odbc_result($resultset, 1); unset($resultset); $nbRecordsDone = 0; while ($nbRecordsDone < $nb && $nb > 0) { // Create slices of 100 records. $sparqlQuery = "\n \n select ?s ?p ?o (DATATYPE(?o)) as ?otype (LANG(?o)) as ?olang\n where \n {\n {\n select distinct ?s from <" . $this->ws->ontologyUri . "/import> \n where \n {\n ?s a ?type.\n } \n limit " . $sliceSize . " \n offset " . $nbRecordsDone . "\n } \n \n ?s ?p ?o\n }\n \n "; $resultset = $this->ws->db->query($this->ws->db->build_sparql_query($sparqlQuery, array('s', 'p', 'o', 'otype', 'olang'), FALSE)); if (odbc_error()) { // echo "Error: can't get records slices.\n"; // return; } $crudCreates = ""; $crudUpdates = ""; $crudDeletes = array(); $rdfDocumentN3 = ""; $currentSubject = ""; $subjectDescription = "@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .\n"; while (odbc_fetch_row($resultset)) { $s = odbc_result($resultset, 1); $p = odbc_result($resultset, 2); $o = $this->ws->db->odbc_getPossibleLongResult($resultset, 3); $otype = odbc_result($resultset, 4); $olang = odbc_result($resultset, 5); if ($otype != "" || $olang != "") { $subjectDescription .= "<{$s}> <{$p}> \"\"\"" . $this->n3Encode($o) . "\"\"\" .\n"; } else { $subjectDescription .= "<{$s}> <{$p}> <{$o}> .\n"; } } unset($resultset); $wsq = new WebServiceQuerier(rtrim($this->ws->wsf_base_url, "/") . "/ws/crud/create/", "post", "application/rdf+xml", "document=" . urlencode($subjectDescription) . "&dataset=" . urlencode($this->ws->ontologyUri) . "&mime=" . urlencode("application/rdf+n3") . "&mode=full" . "®istered_ip=" . urlencode($this->ws->registered_ip)); if ($wsq->getStatus() != 200) { $this->ws->conneg->setStatus($wsq->getStatus()); $this->ws->conneg->setStatusMsg($wsq->getStatusMessage()); $this->ws->conneg->setStatusMsgExt($wsq->getStatusMessageDescription()); /* $this->ws->conneg->setError($wsq->pipeline_getError()->id, $crudCreate->pipeline_getError()->webservice, $crudCreate->pipeline_getError()->name, $crudCreate->pipeline_getError()->description, $crudCreate->pipeline_getError()->debugInfo, $crudCreate->pipeline_getError()->level); */ // In case of error, we delete the dataset we previously created. $ontologyDelete = new OntologyDelete($this->ws->ontologyUri, $this->ws->registered_ip, $this->ws->requester_ip); $ontologyDelete->ws_conneg($_SERVER['HTTP_ACCEPT'], $_SERVER['HTTP_ACCEPT_CHARSET'], $_SERVER['HTTP_ACCEPT_ENCODING'], $_SERVER['HTTP_ACCEPT_LANGUAGE']); $ontologyDelete->deleteOntology(); if ($ontologyDelete->pipeline_getResponseHeaderStatus() != 200) { $this->ws->conneg->setStatus($ontologyDelete->pipeline_getResponseHeaderStatus()); $this->ws->conneg->setStatusMsg($ontologyDelete->pipeline_getResponseHeaderStatusMsg()); $this->ws->conneg->setStatusMsgExt($ontologyDelete->pipeline_getResponseHeaderStatusMsgExt()); $this->ws->conneg->setError($ontologyDelete->pipeline_getError()->id, $ontologyDelete->pipeline_getError()->webservice, $ontologyDelete->pipeline_getError()->name, $ontologyDelete->pipeline_getError()->description, $ontologyDelete->pipeline_getError()->debugInfo, $ontologyDelete->pipeline_getError()->level); //return; } //return; } $nbRecordsDone += $sliceSize; } // Now delete the graph we used to import the file $sqlQuery = "sparql clear graph <" . $this->ws->ontologyUri . "/import>"; $resultset = $this->ws->db->query($sqlQuery); if (odbc_error()) { // echo "Error: can't delete the graph sued for importing the file\n"; // return; } unset($resultset); } else { $nbClasses = $ontology->getNbClasses(); $sliceSize = 200; // Note: in OntologyCreate, we have to merge all the classes, properties and named individuals // together. This is needed to properly handle possible punning used in imported ontologies. // If we don't do this, and that a resource is both a class and an individual, then only // the individual will be in the Solr index because it would overwrite the Class // record document with the same URI. include_once "../../framework/arc2/ARC2.php"; $rdfxmlParser = ARC2::getRDFParser(); $rdfxmlSerializer = ARC2::getRDFXMLSerializer(); $resourcesIndex = $rdfxmlParser->getSimpleIndex(0); for ($i = 0; $i < $nbClasses; $i += $sliceSize) { $ontologyRead = new OntologyRead($this->ws->ontologyUri, "getClasses", "mode=descriptions;limit={$sliceSize};offset={$i}", $this->ws->registered_ip, $this->ws->requester_ip); // Since we are in pipeline mode, we have to set the owlapisession using the current one. // otherwise the java bridge will return an error $ontologyRead->setOwlApiSession($OwlApiSession); $ontologyRead->ws_conneg("application/rdf+xml", $_SERVER['HTTP_ACCEPT_CHARSET'], $_SERVER['HTTP_ACCEPT_ENCODING'], $_SERVER['HTTP_ACCEPT_LANGUAGE']); if ($this->ws->reasoner) { $ontologyRead->useReasoner(); } else { $ontologyRead->stopUsingReasoner(); } $ontologyRead->process(); $classesRDF = $ontologyRead->ws_serialize(); $rdfxmlParser->parse($this->ws->ontologyUri, $classesRDF); $resourceIndex = $rdfxmlParser->getSimpleIndex(0); $resourcesIndex = ARC2::getMergedIndex($resourcesIndex, $resourceIndex); unset($ontologyRead); } $nbProperties = 0; $nbProperties += $ontology->getNbObjectProperties(); $nbProperties += $ontology->getNbDataProperties(); $nbProperties += $ontology->getNbAnnotationProperties(); $sliceSize = 200; for ($i = 0; $i < $nbProperties; $i += $sliceSize) { $ontologyRead = new OntologyRead($this->ws->ontologyUri, "getProperties", "mode=descriptions;limit={$sliceSize};offset={$i};type=all", $this->ws->registered_ip, $this->ws->requester_ip); // Since we are in pipeline mode, we have to set the owlapisession using the current one. // otherwise the java bridge will return an error $ontologyRead->setOwlApiSession($OwlApiSession); $ontologyRead->ws_conneg("application/rdf+xml", $_SERVER['HTTP_ACCEPT_CHARSET'], $_SERVER['HTTP_ACCEPT_ENCODING'], $_SERVER['HTTP_ACCEPT_LANGUAGE']); if ($this->ws->reasoner) { $ontologyRead->useReasoner(); } else { $ontologyRead->stopUsingReasoner(); } $ontologyRead->process(); $propertiesRDF = $ontologyRead->ws_serialize(); $rdfxmlParser->parse($this->ws->ontologyUri, $propertiesRDF); $resourceIndex = $rdfxmlParser->getSimpleIndex(0); $resourcesIndex = ARC2::getMergedIndex($resourcesIndex, $resourceIndex); unset($ontologyRead); } $nbNamedIndividuals = $ontology->getNbNamedIndividuals(); $sliceSize = 200; for ($i = 0; $i < $nbNamedIndividuals; $i += $sliceSize) { $ontologyRead = new OntologyRead($this->ws->ontologyUri, "getNamedIndividuals", "classuri=all;mode=descriptions;limit={$sliceSize};offset={$i}", $this->ws->registered_ip, $this->ws->requester_ip); // Since we are in pipeline mode, we have to set the owlapisession using the current one. // otherwise the java bridge will return an error $ontologyRead->setOwlApiSession($OwlApiSession); $ontologyRead->ws_conneg("application/rdf+xml", $_SERVER['HTTP_ACCEPT_CHARSET'], $_SERVER['HTTP_ACCEPT_ENCODING'], $_SERVER['HTTP_ACCEPT_LANGUAGE']); if ($this->ws->reasoner) { $ontologyRead->useReasoner(); } else { $ontologyRead->stopUsingReasoner(); } $ontologyRead->process(); $namedIndividualsRDF = $ontologyRead->ws_serialize(); $rdfxmlParser->parse($this->ws->ontologyUri, $namedIndividualsRDF); $resourceIndex = $rdfxmlParser->getSimpleIndex(0); $resourcesIndex = ARC2::getMergedIndex($resourcesIndex, $resourceIndex); unset($ontologyRead); } // Now, let's index the resources of this ontology within structWSF (for the usage of browse, search // and sparql) // Split the aggregated resources in multiple slices $nbResources = count($resourcesIndex); $sliceSize = 200; for ($i = 0; $i < $nbResources; $i += $sliceSize) { $slicedResourcesIndex = array_slice($resourcesIndex, $i, $sliceSize); $resourcesRDF = $rdfxmlSerializer->getSerializedIndex($slicedResourcesIndex); $crudCreate = new CrudCreate($resourcesRDF, "application/rdf+xml", "full", $this->ws->ontologyUri, $this->ws->registered_ip, $this->ws->requester_ip); $crudCreate->ws_conneg($_SERVER['HTTP_ACCEPT'], $_SERVER['HTTP_ACCEPT_CHARSET'], $_SERVER['HTTP_ACCEPT_ENCODING'], $_SERVER['HTTP_ACCEPT_LANGUAGE']); $crudCreate->process(); if ($crudCreate->pipeline_getResponseHeaderStatus() != 200) { $this->ws->conneg->setStatus($crudCreate->pipeline_getResponseHeaderStatus()); $this->ws->conneg->setStatusMsg($crudCreate->pipeline_getResponseHeaderStatusMsg()); $this->ws->conneg->setStatusMsgExt($crudCreate->pipeline_getResponseHeaderStatusMsgExt()); $this->ws->conneg->setError($crudCreate->pipeline_getError()->id, $crudCreate->pipeline_getError()->webservice, $crudCreate->pipeline_getError()->name, $crudCreate->pipeline_getError()->description, $crudCreate->pipeline_getError()->debugInfo, $crudCreate->pipeline_getError()->level); // In case of error, we delete the dataset we previously created. $ontologyDelete = new OntologyDelete($this->ws->ontologyUri, $this->ws->registered_ip, $this->ws->requester_ip); $ontologyDelete->ws_conneg($_SERVER['HTTP_ACCEPT'], $_SERVER['HTTP_ACCEPT_CHARSET'], $_SERVER['HTTP_ACCEPT_ENCODING'], $_SERVER['HTTP_ACCEPT_LANGUAGE']); $ontologyDelete->deleteOntology(); if ($ontologyDelete->pipeline_getResponseHeaderStatus() != 200) { $this->ws->conneg->setStatus($ontologyDelete->pipeline_getResponseHeaderStatus()); $this->ws->conneg->setStatusMsg($ontologyDelete->pipeline_getResponseHeaderStatusMsg()); $this->ws->conneg->setStatusMsgExt($ontologyDelete->pipeline_getResponseHeaderStatusMsgExt()); $this->ws->conneg->setError($ontologyDelete->pipeline_getError()->id, $ontologyDelete->pipeline_getError()->webservice, $ontologyDelete->pipeline_getError()->name, $ontologyDelete->pipeline_getError()->description, $ontologyDelete->pipeline_getError()->debugInfo, $ontologyDelete->pipeline_getError()->level); return; } return; } unset($crudCreate); } } } } } }