<?php $rng = <<<RNG <?xml version="1.0" encoding="UTF-8"?> <grammar ns="" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> <start> \t<element name="apple"> </element> </start> </grammar> RNG; $xml = <<<XML <?xml version="1.0"?> <apple> <pear>Pear</pear> </apple> XML; $doc = new DOMDocument(); $doc->loadXML($xml); $result = $doc->relaxNGValidateSource($rng); var_dump($result);
protected function transform_xsl($url, $xsl_filename, $isstring = 0) { if (strrchr($url, 'http://') || $this->text != '') { if (strrchr($url, '#')) { $fragment = array_pop(explode('#', $url)); } if ($this->text != '') { $this->use_store = 0; $title = 'Using direct Input'; $url = $this->path . 'direct/'; $html = method_exists('tidy', 'cleanRepair') ? $this->tidy_html(urldecode($this->text), '', 'php') : urldecode($this->text); } else { $html = $this->get_file_contents($url); } if (strlen(trim($html)) === 0) { return $this->error('noURL'); } $dom = new DOMDocument('1.0'); $dom->preserveWhiteSpace = false; if ($this->text != '') { @$dom->loadXML($html); } else { @$dom->loadXML($this->tidy_html($html, $url, $this->tidy_option)); } $dom->formatOutput = true; $dom->normalizeDocument(); $title = !isset($title) ? $dom->getElementsByTagName('title')->item(0)->nodeValue : $title; if ($this->type == 'rdfa' && !$dom->getElementsByTagName('html')->item(0)->getAttribute('xmlns')) { $dom->getElementsByTagName('html')->item(0)->setAttribute('xmlns', 'http://www.w3.org/1999/xhtml'); } if (isset($fragment)) { $dom->relaxNGValidateSource($this->valid_schema()); $element = $dom->getElementById($fragment); $content = $dom->saveXML($element); $dom = $this->return_html_frag($content, $title); } if (!method_exists('xsltProcessor', 'transformToXML')) { die("Sorry PHP xslt functions unavailable"); } $xslt = new xsltProcessor(); $xslt->setParameter('', 'transformr', $this->path); $xslt->setParameter('', 'url', $url); $xslt->setParameter('', 'request-uri', $_SERVER['REQUEST_URI']); $xslt->setParameter('', 'base-uri', $url); $xslt->setParameter('', 'doc-title', $title); $xslt->setParameter('', 'version', $this->version); if ($this->use_store == 1) { $xslt->setParameter('', 'endpoint-link', $this->path . 'sparql/endpoint?'); } $xslt->importStyleSheet(DomDocument::load($xsl_filename)); if (!@DomDocument::loadXML($dom->saveXML())) { $dom = @DomDocument::loadXML($this->tidy_html($html, $url, $this->tidy_option, 'output-xml')); // reload as plain vanilla xml if (!$dom) { return $this->error('invalidDoc'); } } return $xslt->transformToXML(@DomDocument::loadXML($dom->saveXML())); } elseif ($url == 'referer' && getenv("HTTP_REFERER") != '') { $referer = getenv("HTTP_REFERER"); return $this->transform_xsl($referer, $xsl_filename); } elseif (getenv("HTTP_REFERER") != '' && $url != '') { $referer = getenv("HTTP_REFERER"); return $this->transform_xsl($referer . '#' . $url, $xsl_filename); } else { return $this->error('noURL'); } }