owl = $owl; $this->parse_children = $parse_children; $this->parse(); } /** * A wrapper for XMLReader::read() read function. * * This function calls read() on the $owl object and checks to see * if we are at the end of the XML file. If so, it sets the $is_finished * member variable to TRUE. * * @return * The value of XMLReader::read(). */ private function owl_read() { $retval = $this->owl->read(); if ($this->owl->nodeType == XMLReader::END_ELEMENT and $this->owl->name == 'rdf:RDF') { $this->is_finished = TRUE; } return $retval; } /** * * @param private * This function is to parse each of the OWL Stanzas of the ro.owl file. */ private function parse() { // Make sure we are at the beginning of an element. while ($this->owl->nodeType != XMLReader::ELEMENT) { // In the event we've hit the end of the file, then return. if ($this->is_finished) { return; } $this->owl_read(); } $this->tag_name = $this->owl->name; $has_value = $this->owl->hasValue; $is_empty = $this->owl->isEmptyElement; // Get the attributes. $num_attrs = $this->owl->attributeCount; if ($num_attrs > 0) { $this->owl->moveToFirstAttribute(); for ($i = 0; $i < $num_attrs; $i++) { $this->attributes[$this->owl->name] = $this->owl->value; $this->owl->moveToNextAttribute(); } } // If this element is empty then just return. if ($is_empty) { return; } // Determine if the element has a value. If so, then set the value for the class. if ($this->owl->hasValue) { $this->owl_read(); $this->value = $this->owl->value; } // Get the children that should be parsed within the Stanza. if ($this->parse_children == TRUE) { while ($this->owl_read()) { if ($this->owl->nodeType == XMLReader::END_ELEMENT and $this->owl->name == $this->tag_name) { return; } else { if ($this->owl->nodeType == XMLReader::ELEMENT) { $child = new OWLStanza($this->owl); $this->children[] = $child; } } } } } /** * Get the Value * * @ return The text value of a XML element. */ public function getValue() { return $this->value; } /** * Gets the children array. * * @return An array of OWLStanza objects containing the children elements. */ public function getChildren() { return $this->children; } /** * Sets the children array. * * @param $children * An array of OWLStanza objects containing the children elements. * * @return FALSE if the array was not set, TRUE otherwise. */ public function setChildren($children) { // Makes sure the incoming argument is an array. if (!is_array($children)) { return FALSE; } // Make sure that all of the array elements are OWLStanza objects. foreach ($children as $child) { if (get_class($child) != 'OWLStanza') { return FALSE; } } // All is good, set the children. $this->children = $children; } /** * Gets the child($tag_name) array. * * @return * An OWLStanza object whos tag name matches the tag name provided. * * */ public function getChild($tag_name) { foreach ($this->children as $child) { if ($child->getTagName() == $tag_name) { return $child; } } return NULL; } /** * Gets the tag name. * * @return An XML element tag name (e.g. ‘owl:ObjectProperty’, * 'owl:AnnotationProperty’, 'owl:Ontology'). */ public function getTagName() { return $this->tag_name; } /** * Sets the tag name. * * @param $tag_name The * XML element tag name * * @return value element tag name. */ public function setTagName($tag_name) { $this->tag_name = $tag_name; return; } /** * Gets the attributes array. * * @return An array containing a key/value associative array * of all of the attributes between the XML elements tag name. */ public function getAttributes() { return $this->attributes; } /** * Sets the attributes array. * * @param $attributes An * array containing a key/value associative array of all of the * attributes. * * @return FALSE if the array was not set, TRUE otherwise. */ public function setAttributes($attributes) { // Makes sure the incoming argument is an array. if (!is_array($attributes)) { return FALSE; } // Make sure that all of the array are key/values. foreach ($attributes as $attribute_name) { if (get_class($attribute_name) != 'OWLStanza') { return FALSE; } } // All is good, set the attributes. $this->attributes = $attributes; } /** * * @param * $attribute_name * * @return An|NULL */ public function getAttribute($attribute_name) { foreach ($this->attributes as $aname => $value) { if ($aname == $attribute_name) { return $value; } } return NULL; } /** * Checks if the OWL XML file has been completely parsed. * * @return * TRUE if parsing is completed, FALSE otherwise. */ public function isFinished() { return $this->is_finished; } /** * Reconstructs the XML for the stanza. * * @return * A string containing XML for this stanza. */ public function getXML() { // Start the element with the tag name. $xml = '<' . $this->tag_name; // Iterate through the attributes and add them to our XML string. if (count($this->attributes) > 0) { foreach ($this->attributes as $aname => $value) { $xml .= " " . $aname . '="' . $value . '"'; } } // If this stanza has a value this implies there are no children, // so close the element start, add the value and add the closing element // tag. if ($this->value) { $xml .= '>' . $this->value . 'tag_name . ">\n"; return $xml; } // If we're here, we do not have a value. This is therefore an empty // element, or it has children. If we have no children then we // have an empty element and we can close it out and return. if (count($this->children) == 0) { $xml .= " />\n"; return $xml; } // Add in the children's XML recursively. $childs = ''; foreach ($this->children as $child) { // We want to add two character indentation to all lines returned by // the child XML. $childs .= preg_replace("/^/", " ", $child->getXML()); } $xml .= ">\n"; $xml .= $childs; $xml .= "tag_name . ">\n"; return $xml; } }