Unverified Commit 89d9f113 authored by alexpott's avatar alexpott
Browse files

Issue #3110972 by sanduhrs, jungle, raman.b, samiullah, alexpott, andypost,...

Issue #3110972 by sanduhrs, jungle, raman.b, samiullah, alexpott, andypost, catch, xjm: Update easyrdf library to 1.0.0
parent f0462354
......@@ -33,7 +33,7 @@
"symfony/lock": "^4.4",
"symfony/browser-kit": "^4.4",
"symfony/dom-crawler": "^4.4 !=4.4.5",
"easyrdf/easyrdf": "^0.9"
"easyrdf/easyrdf": "^0.9 || ^1.0"
},
"replace": {
"paragonie/random_compat": "9.99.99",
......
......@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "8877ebb73b0fca58e145989738ba04b4",
"content-hash": "059e8aee61edb73b1526b840eb6c624c",
"packages": [
{
"name": "asm89/stack-cors",
......@@ -4805,35 +4805,39 @@
},
{
"name": "easyrdf/easyrdf",
"version": "0.9.1",
"version": "1.0.0",
"source": {
"type": "git",
"url": "https://github.com/easyrdf/easyrdf.git",
"reference": "acd09dfe0555fbcfa254291e433c45fdd4652566"
"reference": "8735708426066b791c2a6d40329050d5cf31385c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/easyrdf/easyrdf/zipball/acd09dfe0555fbcfa254291e433c45fdd4652566",
"reference": "acd09dfe0555fbcfa254291e433c45fdd4652566",
"url": "https://api.github.com/repos/easyrdf/easyrdf/zipball/8735708426066b791c2a6d40329050d5cf31385c",
"reference": "8735708426066b791c2a6d40329050d5cf31385c",
"shasum": ""
},
"require": {
"ext-mbstring": "*",
"ext-pcre": "*",
"php": ">=5.2.8"
"php": ">=7.1.0"
},
"require-dev": {
"phpunit/phpunit": "~3.5",
"sami/sami": "~1.4",
"squizlabs/php_codesniffer": "~1.4.3"
"ml/json-ld": "~1.0",
"phpunit/phpunit": "^7",
"sami/sami": "^4",
"semsol/arc2": "~2.2",
"squizlabs/php_codesniffer": "3.*",
"zendframework/zend-http": "~2.3"
},
"suggest": {
"ml/json-ld": "~1.0"
"ml/json-ld": "~1.0",
"semsol/arc2": "~2.2"
},
"type": "library",
"autoload": {
"psr-0": {
"EasyRdf_": "lib/"
"psr-4": {
"EasyRdf\\": "lib"
}
},
"notification-url": "https://packagist.org/downloads/",
......@@ -4850,6 +4854,7 @@
{
"name": "Alexey Zakhlestin",
"email": "indeyets@gmail.com",
"homepage": "http://indeyets.ru/",
"role": "Developer"
}
],
......@@ -4863,7 +4868,12 @@
"rdfa",
"sparql"
],
"time": "2015-02-27T09:45:49+00:00"
"support": {
"forum": "http://groups.google.com/group/easyrdf/",
"issues": "http://github.com/easyrdf/easyrdf/issues",
"source": "https://github.com/easyrdf/easyrdf/tree/master"
},
"time": "2020-07-14T23:45:20+00:00"
},
{
"name": "fabpot/goutte",
......
......@@ -12,7 +12,7 @@
"behat/mink-selenium2-driver": "^1.4",
"composer/composer": "^1.9.1",
"drupal/coder": "^8.3.7",
"easyrdf/easyrdf": "^0.9",
"easyrdf/easyrdf": "^0.9 || ^1.0",
"justinrainbow/json-schema": "^5.2",
"mikey179/vfsstream": "^1.6.8",
"phpspec/prophecy": "^1.7",
......
......@@ -18,7 +18,7 @@
"composer/xdebug-handler": "1.4.3",
"doctrine/instantiator": "1.3.1",
"drupal/coder": "8.3.9",
"easyrdf/easyrdf": "0.9.1",
"easyrdf/easyrdf": "1.0.0",
"fabpot/goutte": "v3.3.0",
"instaclick/php-webdriver": "1.4.7",
"justinrainbow/json-schema": "5.2.10",
......
<?php
// @codingStandardsIgnoreFile
namespace Drupal\Tests\rdf\Traits;
/**
* This is copy of \EasyRdf_ParsedUri from the easyrdf/easyrdf library.
*
* It fixes a PHP 7.4 deprecation in \EasyRdf_ParsedUri::normalize().
*
* @todo https://www.drupal.org/project/drupal/issues/3110972 Remove this work
* around.
*/
/**
* EasyRdf
*
* LICENSE
*
* Copyright (c) 2009-2013 Nicholas J Humfrey. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. The name of the author 'Nicholas J Humfrey" may be used to endorse or
* promote products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* @package EasyRdf
* @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
*/
/**
* A RFC3986 compliant URI parser
*
* @package EasyRdf
* @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
* @link http://www.ietf.org/rfc/rfc3986.txt
*/
class EasyRdf_ParsedUri
{
// For all URIs:
private $scheme = null;
private $fragment = null;
// For hierarchical URIs:
private $authority = null;
private $path = null;
private $query = null;
const URI_REGEX = "|^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?|";
/** Constructor for creating a new parsed URI
*
* The $uri parameter can either be a string or an
* associative array with the following keys:
* scheme, authority, path, query, fragment
*
* @param mixed $uri The URI as a string or an array
* @return object EasyRdf_ParsedUri
*/
public function __construct($uri = null)
{
if (is_string($uri)) {
if (preg_match(self::URI_REGEX, $uri, $matches)) {
if (!empty($matches[1])) {
$this->scheme = isset($matches[2]) ? $matches[2] : '';
}
if (!empty($matches[3])) {
$this->authority = isset($matches[4]) ? $matches[4] : '';
}
$this->path = isset($matches[5]) ? $matches[5] : '';
if (!empty($matches[6])) {
$this->query = isset($matches[7]) ? $matches[7] : '';
}
if (!empty($matches[8])) {
$this->fragment = isset($matches[9]) ? $matches[9] : '';
}
}
} elseif (is_array($uri)) {
$this->scheme = isset($uri['scheme']) ? $uri['scheme'] : null;
$this->authority = isset($uri['authority']) ? $uri['authority'] : null;
$this->path = isset($uri['path']) ? $uri['path'] : null;
$this->query = isset($uri['query']) ? $uri['query'] : null;
$this->fragment = isset($uri['fragment']) ? $uri['fragment'] : null;
}
}
/** Returns true if this is an absolute (complete) URI
* @return boolean
*/
public function isAbsolute()
{
return $this->scheme !== null;
}
/** Returns true if this is an relative (partial) URI
* @return boolean
*/
public function isRelative()
{
return $this->scheme === null;
}
/** Returns the scheme of the URI (e.g. http)
* @return string
*/
public function getScheme()
{
return $this->scheme;
}
/** Sets the scheme of the URI (e.g. http)
* @param string $scheme The new value for the scheme of the URI
*/
public function setScheme($scheme)
{
$this->scheme = $scheme;
}
/** Returns the authority of the URI (e.g. www.example.com:8080)
* @return string
*/
public function getAuthority()
{
return $this->authority;
}
/** Sets the authority of the URI (e.g. www.example.com:8080)
* @param string $authority The new value for the authority component of the URI
*/
public function setAuthority($authority)
{
$this->authority = $authority;
}
/** Returns the path of the URI (e.g. /foo/bar)
* @return string
*/
public function getPath()
{
return $this->path;
}
/** Set the path of the URI (e.g. /foo/bar)
* @param string $path The new value for the path component of the URI
*/
public function setPath($path)
{
$this->path = $path;
}
/** Returns the query string part of the URI (e.g. foo=bar)
* @return string
*/
public function getQuery()
{
return $this->query;
}
/** Set the query string of the URI (e.g. foo=bar)
* @param string $query The new value for the query string component of the URI
*/
public function setQuery($query)
{
$this->query = $query;
}
/** Returns the fragment part of the URI (i.e. after the #)
* @return string
*/
public function getFragment()
{
return $this->fragment;
}
/** Set the fragment of the URI (i.e. after the #)
* @param string $fragment The new value for the fragment component of the URI
*/
public function setFragment($fragment)
{
$this->fragment = $fragment;
}
/**
* Normalizes the path of this URI if it has one. Normalizing a path means
* that any unnecessary '.' and '..' segments are removed. For example, the
* URI http://example.com/a/b/../c/./d would be normalized to
* http://example.com/a/c/d
*
* @return object EasyRdf_ParsedUri
*/
public function normalize()
{
if (empty($this->path)) {
return $this;
}
// Remove ./ from the start
if (substr($this->path, 0, 2) == './') {
// Remove both characters
$this->path = substr($this->path, 2);
}
// Remove /. from the end
if (substr($this->path, -2) == '/.') {
// Remove only the last dot, not the slash!
$this->path = substr($this->path, 0, -1);
}
if (substr($this->path, -3) == '/..') {
$this->path .= '/';
}
// Split the path into its segments
$segments = explode('/', $this->path);
$newSegments = array();
// Remove all unnecessary '.' and '..' segments
foreach ($segments as $segment) {
if ($segment == '..') {
// Remove the previous part of the path
$count = count($newSegments);
if ($count > 0 && $newSegments[$count-1]) {
array_pop($newSegments);
}
} elseif ($segment == '.') {
// Ignore
continue;
} else {
array_push($newSegments, $segment);
}
}
// Construct the new normalized path
$this->path = implode('/', $newSegments);
// Allow easy chaining of methods
return $this;
}
/**
* Resolves a relative URI using this URI as the base URI.
*/
public function resolve($relUri)
{
// If it is a string, then convert it to a parsed object
if (is_string($relUri)) {
$relUri = new EasyRdf_ParsedUri($relUri);
}
// This code is based on the pseudocode in section 5.2.2 of RFC3986
$target = new EasyRdf_ParsedUri();
if ($relUri->scheme) {
$target->scheme = $relUri->scheme;
$target->authority = $relUri->authority;
$target->path = $relUri->path;
$target->query = $relUri->query;
} else {
if ($relUri->authority) {
$target->authority = $relUri->authority;
$target->path = $relUri->path;
$target->query = $relUri->query;
} else {
if (empty($relUri->path)) {
$target->path = $this->path;
if ($relUri->query) {
$target->query = $relUri->query;
} else {
$target->query = $this->query;
}
} else {
if (substr($relUri->path, 0, 1) == '/') {
$target->path = $relUri->path;
} else {
$path = $this->path;
$lastSlash = strrpos($path, '/');
if ($lastSlash !== false) {
$path = substr($path, 0, $lastSlash + 1);
} else {
$path = '/';
}
$target->path .= $path . $relUri->path;
}
$target->query = $relUri->query;
}
$target->authority = $this->authority;
}
$target->scheme = $this->scheme;
}
$target->fragment = $relUri->fragment;
$target->normalize();
return $target;
}
/** Convert the parsed URI back into a string
*
* @return string The URI as a string
*/
public function toString()
{
$str = '';
if ($this->scheme !== null) {
$str .= $this->scheme . ':';
}
if ($this->authority !== null) {
$str .= '//' . $this->authority;
}
$str .= $this->path;
if ($this->query !== null) {
$str .= '?' . $this->query;
}
if ($this->fragment !== null) {
$str .= '#' . $this->fragment;
}
return $str;
}
/** Magic method to convert the URI, when casted, back to a string
*
* @return string The URI as a string
*/
public function __toString()
{
return $this->toString();
}
}
......@@ -3,14 +3,8 @@
namespace Drupal\Tests\rdf\Traits;
use Drupal\Core\Url;
/**
* Override \EasyRdf_ParsedUri for PHP 7.4 compatibility.
*
* @todo https://www.drupal.org/project/drupal/issues/3110972 Remove this work
* around.
*/
class_alias('\Drupal\Tests\rdf\Traits\EasyRdf_ParsedUri', '\EasyRdf_ParsedUri');
use EasyRdf\Graph;
use EasyRdf\Parser\Rdfa;
/**
* Defines a trait for parsing RDF properties from HTML.
......@@ -39,10 +33,12 @@ trait RdfParsingTrait {
*
* @return bool
* TRUE if the property exists with the given value.
*
* @throws \EasyRdf\Exception
*/
protected function hasRdfProperty($html, $base_uri, $resource, $property, array $value) {
$parser = new \EasyRdf_Parser_Rdfa();
$graph = new \EasyRdf_Graph();
$parser = $this->getInstanceParser();
$graph = $this->getInstanceGraph();
$parser->parse($graph, $html, 'rdfa', $base_uri);
return $graph->hasProperty($resource, $property, $value);
......@@ -72,10 +68,12 @@ protected function hasRdfProperty($html, $base_uri, $resource, $property, array
*
* @return bool
* TRUE if the property exists with the given value.
*
* @throws \EasyRdf\Exception
*/
protected function hasRdfChildProperty($html, $base_uri, $resource, $parent_property, string $child_property, array $value) {
$parser = new \EasyRdf_Parser_Rdfa();
$graph = new \EasyRdf_Graph();
$parser = $this->getInstanceParser();
$graph = $this->getInstanceGraph();
$parser->parse($graph, $html, 'rdfa', $base_uri);
$node = $graph->get($resource, $parent_property);
return $graph->hasProperty($node, $child_property, $value);
......@@ -93,10 +91,12 @@ protected function hasRdfChildProperty($html, $base_uri, $resource, $parent_prop
*
* @return int
* The number of resources of the provided type.
*
* @throws \EasyRdf\Exception
*/
protected function getElementByRdfTypeCount(Url $url, $base_uri, $type) {
$parser = new \EasyRdf_Parser_Rdfa();
$graph = new \EasyRdf_Graph();
$parser = $this->getInstanceParser();
$graph = $this->getInstanceGraph();
$parser->parse($graph, $this->drupalGet($url), 'rdfa', $base_uri);
return count($graph->allOfType($type));
}
......@@ -113,10 +113,12 @@ protected function getElementByRdfTypeCount(Url $url, $base_uri, $type) {
*
* @return string|null
* The type of resource or NULL if the resource has no type.
*
* @throws \EasyRdf\Exception
*/
protected function getElementRdfType(Url $url, $base_uri, $resource_uri) {
$parser = new \EasyRdf_Parser_Rdfa();
$graph = new \EasyRdf_Graph();
$parser = $this->getInstanceParser();
$graph = $this->getInstanceGraph();
$parser->parse($graph, $this->drupalGet($url), 'rdfa', $base_uri);
return $graph->type($resource_uri);
}
......@@ -135,12 +137,46 @@ protected function getElementRdfType(Url $url, $base_uri, $resource_uri) {
*
* @return bool
* TRUE if the given property is blank.
*
* @throws \EasyRdf\Exception
*/
protected function rdfElementIsBlankNode($html, $base_uri, $resource_uri, $property) {
$parser = new \EasyRdf_Parser_Rdfa();
$graph = new \EasyRdf_Graph();
$parser = $this->getInstanceParser();
$graph = $this->getInstanceGraph();
$parser->parse($graph, $html, 'rdfa', $base_uri);
return $graph->get($resource_uri, $property)->isBnode();
}
/**
* Gets a new instance of EasyRdf\Parser\Rdfa or EasyRdf_Parser_Rdfa.
*
* @return \EasyRdf\Parser\Rdfa|\EasyRdf_Parser_Rdfa
* The instance.
*
* @todo Clean this up in drupal:10.0.0.
* @see https://www.drupal.org/node/3176468
*/
private function getInstanceParser() {
if (class_exists('EasyRdf\Parser\Rdfa')) {
return new Rdfa();
}
return new \EasyRdf_Parser_Rdfa();
}
/**
* Gets a new instance of EasyRdf\Graph or EasyRdf_Graph.
*
* @return \EasyRdf\Graph|\EasyRdf_Graph
* The instance.
*
* @todo Clean this up in drupal:10.0.0.
* @see https://www.drupal.org/node/3176468
*/
private function getInstanceGraph() {
if (class_exists('EasyRdf\Graph')) {
return new Graph();
}
return new \EasyRdf_Graph();
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment