summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwebchick2014-01-24 07:04:41 (GMT)
committerwebchick2014-01-24 07:04:41 (GMT)
commit02b19f340a49ed2bcc0ba2261976e140f725fca3 (patch)
treef6a73e48f556ca4e3fe6adc4b86108195197a268
parent129cd90f61bbd7793f08fbd5fee914d4b792c59a (diff)
Issue #2173653 by kay_v, scor: Update easyrdf/easyrdf to 0.8.0.
-rw-r--r--composer.json2
-rw-r--r--composer.lock23
-rw-r--r--core/vendor/autoload.php2
-rw-r--r--core/vendor/composer/autoload_real.php6
-rw-r--r--core/vendor/composer/installed.json116
-rw-r--r--core/vendor/easyrdf/easyrdf/CHANGELOG.md38
-rw-r--r--core/vendor/easyrdf/easyrdf/DEVELOPER.md32
-rw-r--r--core/vendor/easyrdf/easyrdf/README.md7
-rw-r--r--core/vendor/easyrdf/easyrdf/composer.json7
-rw-r--r--core/vendor/easyrdf/easyrdf/doap.php4
-rw-r--r--core/vendor/easyrdf/easyrdf/lib/EasyRdf.php25
-rw-r--r--core/vendor/easyrdf/easyrdf/lib/EasyRdf/Collection.php333
-rw-r--r--core/vendor/easyrdf/easyrdf/lib/EasyRdf/Container.php230
-rw-r--r--core/vendor/easyrdf/easyrdf/lib/EasyRdf/Exception.php7
-rw-r--r--core/vendor/easyrdf/easyrdf/lib/EasyRdf/Format.php31
-rw-r--r--core/vendor/easyrdf/easyrdf/lib/EasyRdf/Graph.php134
-rw-r--r--core/vendor/easyrdf/easyrdf/lib/EasyRdf/GraphStore.php8
-rw-r--r--core/vendor/easyrdf/easyrdf/lib/EasyRdf/Http.php7
-rw-r--r--core/vendor/easyrdf/easyrdf/lib/EasyRdf/Http/Client.php12
-rw-r--r--core/vendor/easyrdf/easyrdf/lib/EasyRdf/Http/Response.php7
-rw-r--r--core/vendor/easyrdf/easyrdf/lib/EasyRdf/Isomorphic.php436
-rw-r--r--core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal.php34
-rw-r--r--core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/Boolean.php9
-rw-r--r--core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/Date.php17
-rw-r--r--core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/DateTime.php21
-rw-r--r--core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/Decimal.php9
-rw-r--r--core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/HTML.php3
-rw-r--r--core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/HexBinary.php9
-rw-r--r--core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/Integer.php9
-rw-r--r--core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/XML.php3
-rw-r--r--core/vendor/easyrdf/easyrdf/lib/EasyRdf/Namespace.php17
-rw-r--r--core/vendor/easyrdf/easyrdf/lib/EasyRdf/ParsedUri.php7
-rw-r--r--core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser.php7
-rw-r--r--core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Arc.php7
-rw-r--r--core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Exception.php76
-rw-r--r--core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Json.php9
-rw-r--r--core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Ntriples.php50
-rw-r--r--core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Rapper.php7
-rw-r--r--core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/RdfPhp.php7
-rw-r--r--core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/RdfXml.php19
-rw-r--r--core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Rdfa.php39
-rw-r--r--core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Redland.php17
-rw-r--r--core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Turtle.php517
-rw-r--r--core/vendor/easyrdf/easyrdf/lib/EasyRdf/Resource.php53
-rw-r--r--core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser.php23
-rw-r--r--core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/Arc.php15
-rw-r--r--core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/GraphViz.php17
-rw-r--r--core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/Json.php17
-rw-r--r--core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/JsonLd.php42
-rw-r--r--core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/JsonLd_real.php135
-rw-r--r--core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/Ntriples.php44
-rw-r--r--core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/Rapper.php16
-rw-r--r--core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/RdfPhp.php21
-rw-r--r--core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/RdfXml.php70
-rw-r--r--core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/Turtle.php250
-rw-r--r--core/vendor/easyrdf/easyrdf/lib/EasyRdf/Sparql/Client.php216
-rw-r--r--core/vendor/easyrdf/easyrdf/lib/EasyRdf/Sparql/Result.php29
-rw-r--r--core/vendor/easyrdf/easyrdf/lib/EasyRdf/TypeMapper.php17
-rw-r--r--core/vendor/easyrdf/easyrdf/lib/EasyRdf/Utils.php51
-rw-r--r--core/vendor/easyrdf/easyrdf/scripts/copyright_updater.php64
60 files changed, 2707 insertions, 733 deletions
diff --git a/composer.json b/composer.json
index dca14bf..b7e9683 100644
--- a/composer.json
+++ b/composer.json
@@ -20,7 +20,7 @@
"guzzle/http": "3.7.*",
"kriswallsmith/assetic": "1.1.*@alpha",
"symfony-cmf/routing": "1.1.*@alpha",
- "easyrdf/easyrdf": "0.8.*@beta",
+ "easyrdf/easyrdf": "0.8.*",
"phpunit/phpunit": "3.7.*",
"zendframework/zend-feed": "2.2.*"
},
diff --git a/composer.lock b/composer.lock
index 6108435..226faba 100644
--- a/composer.lock
+++ b/composer.lock
@@ -3,7 +3,7 @@
"This file locks the dependencies of your project to a known state",
"Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file"
],
- "hash": "ac2a8ee2f49fcb0535259847306a2bdc",
+ "hash": "0733d59446085cb815b72923c37e0fd6",
"packages": [
{
"name": "doctrine/annotations",
@@ -400,16 +400,16 @@
},
{
"name": "easyrdf/easyrdf",
- "version": "0.8.0-beta.1",
+ "version": "0.8.0",
"source": {
"type": "git",
- "url": "git://github.com/njh/easyrdf.git",
- "reference": "0.8.0-beta.1"
+ "url": "https://github.com/njh/easyrdf.git",
+ "reference": "3e43ab7274004e9f4192e06b9fc147781e1f85c2"
},
"dist": {
"type": "zip",
- "url": "https://github.com/njh/easyrdf/archive/0.8.0-beta.1.zip",
- "reference": "0.8.0-beta.1",
+ "url": "https://api.github.com/repos/njh/easyrdf/zipball/3e43ab7274004e9f4192e06b9fc147781e1f85c2",
+ "reference": "3e43ab7274004e9f4192e06b9fc147781e1f85c2",
"shasum": ""
},
"require": {
@@ -423,6 +423,9 @@
"sami/sami": "dev-master",
"squizlabs/php_codesniffer": ">=1.4.3"
},
+ "suggest": {
+ "ml/json-ld": "dev-master"
+ },
"type": "library",
"autoload": {
"psr-0": {
@@ -448,9 +451,10 @@
"RDF",
"Semantic Web",
"Turtle",
- "rdfa"
+ "rdfa",
+ "sparql"
],
- "time": "2013-01-18 15:54:28"
+ "time": "2013-12-30 22:31:37"
},
{
"name": "guzzle/common",
@@ -2134,8 +2138,7 @@
"doctrine/common": 20,
"doctrine/annotations": 20,
"kriswallsmith/assetic": 15,
- "symfony-cmf/routing": 15,
- "easyrdf/easyrdf": 10
+ "symfony-cmf/routing": 15
},
"platform": [
diff --git a/core/vendor/autoload.php b/core/vendor/autoload.php
index 00592d9..5052aab 100644
--- a/core/vendor/autoload.php
+++ b/core/vendor/autoload.php
@@ -4,4 +4,4 @@
require_once __DIR__ . '/composer' . '/autoload_real.php';
-return ComposerAutoloaderInit8448fbbf88ecb044f224057d631a4472::getLoader();
+return ComposerAutoloaderInit92462a247bf83504e990c5f706f228cc::getLoader();
diff --git a/core/vendor/composer/autoload_real.php b/core/vendor/composer/autoload_real.php
index 9f78665..fea362d 100644
--- a/core/vendor/composer/autoload_real.php
+++ b/core/vendor/composer/autoload_real.php
@@ -2,7 +2,7 @@
// autoload_real.php @generated by Composer
-class ComposerAutoloaderInit8448fbbf88ecb044f224057d631a4472
+class ComposerAutoloaderInit92462a247bf83504e990c5f706f228cc
{
private static $loader;
@@ -19,9 +19,9 @@ class ComposerAutoloaderInit8448fbbf88ecb044f224057d631a4472
return self::$loader;
}
- spl_autoload_register(array('ComposerAutoloaderInit8448fbbf88ecb044f224057d631a4472', 'loadClassLoader'), true, true);
+ spl_autoload_register(array('ComposerAutoloaderInit92462a247bf83504e990c5f706f228cc', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
- spl_autoload_unregister(array('ComposerAutoloaderInit8448fbbf88ecb044f224057d631a4472', 'loadClassLoader'));
+ spl_autoload_unregister(array('ComposerAutoloaderInit92462a247bf83504e990c5f706f228cc', 'loadClassLoader'));
$vendorDir = dirname(__DIR__);
$baseDir = dirname(dirname($vendorDir));
diff --git a/core/vendor/composer/installed.json b/core/vendor/composer/installed.json
index b9dd77e..81d0e48 100644
--- a/core/vendor/composer/installed.json
+++ b/core/vendor/composer/installed.json
@@ -1,61 +1,5 @@
[
{
- "name": "easyrdf/easyrdf",
- "version": "0.8.0-beta.1",
- "version_normalized": "0.8.0.0-beta1",
- "source": {
- "type": "git",
- "url": "git://github.com/njh/easyrdf.git",
- "reference": "0.8.0-beta.1"
- },
- "dist": {
- "type": "zip",
- "url": "https://github.com/njh/easyrdf/archive/0.8.0-beta.1.zip",
- "reference": "0.8.0-beta.1",
- "shasum": ""
- },
- "require": {
- "php": ">=5.2.8"
- },
- "replace": {
- "njh/easyrdf": "self.version"
- },
- "require-dev": {
- "phpunit/phpunit": ">=3.5.15",
- "sami/sami": "dev-master",
- "squizlabs/php_codesniffer": ">=1.4.3"
- },
- "time": "2013-01-18 15:54:28",
- "type": "library",
- "installation-source": "dist",
- "autoload": {
- "psr-0": {
- "EasyRdf_": "lib/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Nicholas Humfrey",
- "email": "njh@aelius.com",
- "homepage": "http://www.aelius.com/njh/",
- "role": "Developer"
- }
- ],
- "description": "EasyRdf is a PHP library designed to make it easy to consume and produce RDF.",
- "homepage": "http://www.easyrdf.org/",
- "keywords": [
- "Linked Data",
- "RDF",
- "Semantic Web",
- "Turtle",
- "rdfa"
- ]
- },
- {
"name": "psr/log",
"version": "1.0.0",
"version_normalized": "1.0.0.0",
@@ -2193,5 +2137,65 @@
],
"description": "Symfony Yaml Component",
"homepage": "http://symfony.com"
+ },
+ {
+ "name": "easyrdf/easyrdf",
+ "version": "0.8.0",
+ "version_normalized": "0.8.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/njh/easyrdf.git",
+ "reference": "3e43ab7274004e9f4192e06b9fc147781e1f85c2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/njh/easyrdf/zipball/3e43ab7274004e9f4192e06b9fc147781e1f85c2",
+ "reference": "3e43ab7274004e9f4192e06b9fc147781e1f85c2",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.2.8"
+ },
+ "replace": {
+ "njh/easyrdf": "self.version"
+ },
+ "require-dev": {
+ "phpunit/phpunit": ">=3.5.15",
+ "sami/sami": "dev-master",
+ "squizlabs/php_codesniffer": ">=1.4.3"
+ },
+ "suggest": {
+ "ml/json-ld": "dev-master"
+ },
+ "time": "2013-12-30 22:31:37",
+ "type": "library",
+ "installation-source": "dist",
+ "autoload": {
+ "psr-0": {
+ "EasyRdf_": "lib/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Nicholas Humfrey",
+ "email": "njh@aelius.com",
+ "homepage": "http://www.aelius.com/njh/",
+ "role": "Developer"
+ }
+ ],
+ "description": "EasyRdf is a PHP library designed to make it easy to consume and produce RDF.",
+ "homepage": "http://www.easyrdf.org/",
+ "keywords": [
+ "Linked Data",
+ "RDF",
+ "Semantic Web",
+ "Turtle",
+ "rdfa",
+ "sparql"
+ ]
}
]
diff --git a/core/vendor/easyrdf/easyrdf/CHANGELOG.md b/core/vendor/easyrdf/easyrdf/CHANGELOG.md
index 482076e..f902b3c 100644
--- a/core/vendor/easyrdf/easyrdf/CHANGELOG.md
+++ b/core/vendor/easyrdf/easyrdf/CHANGELOG.md
@@ -1,21 +1,49 @@
EasyRdf 0.8.0
=============
-API changes
------------
-* is_a() has been renamed to isA()
-
Major new features
------------------
* Now PSR-2 compliant
* Added RDFa parser
+* Added SPARQL Update support to `EasyRdf_Sparql_Client`
+
+API changes
+-----------
+* `is_a()` has been renamed to `isA()`
+* `isBnode()` has been renamed to `isBNode()`
+* `getNodeId()` has been renamed to `getBNodeId()`
+* Added a `$value` property to `hasProperty()`
+* Renamed `toArray()` to `toRdfPhp()`
+* Renamed `count()` to `countValues()` in `EasyRdf_Graph` and `EasyRdf_Resource`
+* Made passing a URI to `delete()` behave more like `all()` and `get()` - you must enclose in `<>`
+* `dump(true)` has changed to `dump('html')`
+* `getUri()` in `EasyRdf_Sparql_Client` has been renamed to `getQueryUri()`
Enhancements
------------
+* Added `EasyRdf_Container` class to help iterate through `rdf:Alt`, `rdf:Bag` and `rdf:Seq`
+* Added `EasyRdf_Collection` class to help iterate through `rdf:List`
+* Added `EasyRdf_Literal_HTML` and `EasyRdf_Literal_XML`
+* Changed formatting of `xsd:dateTime` from `DateTime::ISO8601` to `DateTime::ATOM`
+* Added `rss:title` to the list of properties that `label()` will check for
+* Added support for serialising containers to the RDF/XML serialiser
+* Added getGraph method to `EasyRdf_Resource`
+* Turtle parser improvements
+* Added the `application/n-triples` MIME type for the N-Triples format
+* Added support to `EasyRdf_Namespace` for expanding `a` to `rdf:type`
+* Added `listNamedGraphs()` function to `EasyRdf_Sparql_Client`
+* Added line and column number to exceptions in the built-in parsers
Bug Fixes
---------
-
+* Fixed bug in `EasyRdf_Namespace::expand()` (see issue #114)
+* Fix for dumping SPARQL SELECT query with unbound result (see issue #112)
+* Sesame compatibility : avoid duplicate Content-Length header
+* Fix for for passing objects of type DateTime to $graph->add() (see issue #119)
+* Fix for SPARQL queries longer than 2KB (see issue #85)
+* Fix for dumping literal with unshortenable datatype uri (see issue #120)
+* Fix for getting default mime type or extension when there isn't one
+* Fix for missing trailing slash the HTTP client
EasyRdf 0.7.2
diff --git a/core/vendor/easyrdf/easyrdf/DEVELOPER.md b/core/vendor/easyrdf/easyrdf/DEVELOPER.md
new file mode 100644
index 0000000..a4516ef
--- /dev/null
+++ b/core/vendor/easyrdf/easyrdf/DEVELOPER.md
@@ -0,0 +1,32 @@
+Contributing to EasyRdf
+=======================
+
+
+Contributions to the EasyRdf codebase are welcome using the usual Github pull request workflow.
+
+To run the code style checker:
+```
+make cs
+
+```
+You can run the PHP unit test suite with:
+```
+make test
+```
+
+Unit tests are automatically run after being received by Github:
+http://ci.aelius.com/job/easyrdf/
+
+The tests for the examples are run in a sperate test:
+http://ci.aelius.com/job/easyrdf-examples/
+
+
+Notes
+-----
+
+* Please ask on the [mailing list] before starting work on any significant chnages
+* Please write tests for any new features or bug fixes. The tests should be checked in the same commit as the code.
+
+
+
+[mailing list]:http://groups.google.com/group/easyrdf
diff --git a/core/vendor/easyrdf/easyrdf/README.md b/core/vendor/easyrdf/easyrdf/README.md
index 182b1a5..d5b9956 100644
--- a/core/vendor/easyrdf/easyrdf/README.md
+++ b/core/vendor/easyrdf/easyrdf/README.md
@@ -29,14 +29,14 @@ an [EasyRdf_Graph] object.
Downloads
---------
-The latest version of EasyRdf can be [downloaded from GitHub].
+The latest _stable_ version of EasyRdf can be [downloaded from the EasyRdf website].
Links
-----
* [EasyRdf Homepage](http://www.easyrdf.org/)
-* [API documentation](http://www.easyrdf.org/docs/api/)
+* [API documentation](http://www.easyrdf.org/docs/api)
* [Change Log](http://github.com/njh/easyrdf/blob/master/CHANGELOG.md)
* Source Code: <http://github.com/njh/easyrdf>
* Issue Tracker: <http://github.com/njh/easyrdf/issues>
@@ -86,6 +86,7 @@ More Examples
* [zend_framework.php](https://github.com/njh/easyrdf/blob/master/examples/zend_framework.php#slider) - Example of using Zend_Http_Client and Zend_Loader_Autoloader with EasyRdf
+
Licensing
---------
@@ -101,7 +102,7 @@ The examples are in the public domain, for more information see [UNLICENSE].
[ARC2]:http://github.com/semsol/arc2/
[BSD-3-Clause]:http://www.opensource.org/licenses/BSD-3-Clause
-[downloaded from github]:https://github.com/njh/easyrdf/downloads
+[downloaded from the EasyRdf website]:http://www.easyrdf.org/downloads
[GraphViz]:http://www.graphviz.org/
[rapper]:http://librdf.org/raptor/rapper.html
[RDF]:http://en.wikipedia.org/wiki/Resource_Description_Framework
diff --git a/core/vendor/easyrdf/easyrdf/composer.json b/core/vendor/easyrdf/easyrdf/composer.json
index c93d98d..15be804 100644
--- a/core/vendor/easyrdf/easyrdf/composer.json
+++ b/core/vendor/easyrdf/easyrdf/composer.json
@@ -1,9 +1,9 @@
{
"name": "easyrdf/easyrdf",
"description": "EasyRdf is a PHP library designed to make it easy to consume and produce RDF.",
- "version": "0.8.0-beta.1",
+ "version": "0.8.0",
"type": "library",
- "keywords": ["RDF", "Semantic Web", "Linked Data", "Turtle", "RDFa"],
+ "keywords": ["RDF", "Semantic Web", "Linked Data", "Turtle", "RDFa", "SPARQL"],
"homepage": "http://www.easyrdf.org/",
"license": "BSD-3-Clause",
"authors": [
@@ -22,6 +22,9 @@
"require": {
"php": ">=5.2.8"
},
+ "suggest": {
+ "ml/json-ld": "dev-master"
+ },
"require-dev": {
"phpunit/PHPUnit": ">=3.5.15",
"squizlabs/php_codesniffer": ">=1.4.3",
diff --git a/core/vendor/easyrdf/easyrdf/doap.php b/core/vendor/easyrdf/easyrdf/doap.php
index ff9f190..4393fe0 100644
--- a/core/vendor/easyrdf/easyrdf/doap.php
+++ b/core/vendor/easyrdf/easyrdf/doap.php
@@ -27,8 +27,8 @@
$easyrdf->addResource('doap:category', 'http://dbpedia.org/resource/Resource_Description_Framework');
$easyrdf->addResource('doap:category', 'http://dbpedia.org/resource/PHP');
- $easyrdf->addResource('doap:category', 'http://dbpedialite.org/things/24131#id');
- $easyrdf->addResource('doap:category', 'http://dbpedialite.org/things/53847#id');
+ $easyrdf->addResource('doap:category', 'http://www.dbpedialite.org/things/24131#id');
+ $easyrdf->addResource('doap:category', 'http://www.dbpedialite.org/things/53847#id');
$repository = $doap->newBNode('doap:GitRepository');
$repository->addResource('doap:browse', 'http://github.com/njh/easyrdf');
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf.php b/core/vendor/easyrdf/easyrdf/lib/EasyRdf.php
index 2aaae30..8c7248b 100644
--- a/core/vendor/easyrdf/easyrdf/lib/EasyRdf.php
+++ b/core/vendor/easyrdf/easyrdf/lib/EasyRdf.php
@@ -8,7 +8,7 @@
*
* LICENSE
*
- * Copyright (c) 2009-2011 Nicholas J Humfrey. All rights reserved.
+ * 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:
@@ -34,9 +34,8 @@
* POSSIBILITY OF SUCH DAMAGE.
*
* @package EasyRdf
- * @copyright Copyright (c) 2011 Nicholas J Humfrey
+ * @copyright Copyright (c) 2011-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
- * @version $Id$
*/
/**
@@ -75,6 +74,11 @@ require_once "EasyRdf/Http/Client.php";
require_once "EasyRdf/Http/Response.php";
/**
+ * @see EasyRdf_Isomorphic
+ */
+require_once "EasyRdf/Isomorphic.php";
+
+/**
* @see EasyRdf_Namespace
*/
require_once "EasyRdf/Namespace.php";
@@ -135,6 +139,11 @@ require_once "EasyRdf/ParsedUri.php";
require_once "EasyRdf/Parser.php";
/**
+ * @see EasyRdf_Parser_Exception
+ */
+require_once "EasyRdf/Parser/Exception.php";
+
+/**
* @see EasyRdf_Parser_RdfPhp
*/
require_once "EasyRdf/Parser/RdfPhp.php";
@@ -170,6 +179,16 @@ require_once "EasyRdf/Parser/Turtle.php";
require_once "EasyRdf/Resource.php";
/**
+ * @see EasyRdf_Collection
+ */
+require_once "EasyRdf/Collection.php";
+
+/**
+ * @see EasyRdf_Container
+ */
+require_once "EasyRdf/Container.php";
+
+/**
* @see EasyRdf_Serialiser
*/
require_once "EasyRdf/Serialiser.php";
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Collection.php b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Collection.php
new file mode 100644
index 0000000..b66646c
--- /dev/null
+++ b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Collection.php
@@ -0,0 +1,333 @@
+<?php
+
+/**
+ * EasyRdf
+ *
+ * LICENSE
+ *
+ * Copyright (c) 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) 2013 Nicholas J Humfrey
+ * @license http://www.opensource.org/licenses/bsd-license.php
+ */
+
+/**
+ * Sub-class of EasyRdf_Resource that represents an RDF collection (rdf:List)
+ *
+ * This class can be used to iterate through a collection of items.
+ *
+ * Note that items are numbered from 1 (not 0) for consistency with RDF Containers.
+ *
+ * @package EasyRdf
+ * @link http://www.w3.org/TR/xmlschema-2/#date
+ * @copyright Copyright (c) 2013 Nicholas J Humfrey
+ * @license http://www.opensource.org/licenses/bsd-license.php
+ */
+class EasyRdf_Collection extends EasyRdf_Resource implements ArrayAccess, Countable, SeekableIterator
+{
+ private $position;
+ private $current;
+
+ /** Create a new collection - do not use this directly
+ *
+ * @ignore
+ */
+ public function __construct($uri, $graph)
+ {
+ $this->position = 1;
+ $this->current = null;
+ parent::__construct($uri, $graph);
+ }
+
+ /** Seek to a specific position in the container
+ *
+ * The first item is postion 1
+ *
+ * @param integer $position The position in the container to seek to
+ * @throws OutOfBoundsException
+ */
+ public function seek($position)
+ {
+ if (is_int($position) and $position > 0) {
+ list($node, $actual) = $this->getCollectionNode($position);
+ if ($actual === $position) {
+ $this->position = $actual;
+ $this->current = $node;
+ } else {
+ throw new OutOfBoundsException(
+ "Unable to seek to position $position in the collection"
+ );
+ }
+ } else {
+ throw new InvalidArgumentException(
+ "Collection position must be a positive integer"
+ );
+ }
+ }
+
+ /** Rewind the iterator back to the start of the collection
+ *
+ */
+ public function rewind()
+ {
+ $this->position = 1;
+ $this->current = null;
+ }
+
+ /** Return the current item in the collection
+ *
+ * @return mixed The current item
+ */
+ public function current()
+ {
+ if ($this->position === 1) {
+ return $this->get('rdf:first');
+ } elseif ($this->current) {
+ return $this->current->get('rdf:first');
+ }
+ }
+
+ /** Return the key / current position in the collection
+ *
+ * Note: the first item is number 1
+ *
+ * @return int The current position
+ */
+ public function key()
+ {
+ return $this->position;
+ }
+
+ /** Move forward to next item in the collection
+ *
+ */
+ public function next()
+ {
+ if ($this->position === 1) {
+ $this->current = $this->get('rdf:rest');
+ } elseif ($this->current) {
+ $this->current = $this->current->get('rdf:rest');
+ }
+ $this->position++;
+ }
+
+ /** Checks if current position is valid
+ *
+ * @return bool True if the current position is valid
+ */
+ public function valid()
+ {
+ if ($this->position === 1 and $this->hasProperty('rdf:first')) {
+ return true;
+ } elseif ($this->current !== null and $this->current->hasProperty('rdf:first')) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /** Get a node for a particular offset into the collection
+ *
+ * This function may not return the item you requested, if
+ * it does not exist. Please check the $postion parameter
+ * returned.
+ *
+ * If the offset is null, then the last node in the
+ * collection (before rdf:nil) will be returned.
+ *
+ * @param integer $offset The offset into the collection (or null)
+ * @return array $node, $postion The node object and postion of the node
+ */
+ public function getCollectionNode($offset)
+ {
+ $position = 1;
+ $node = $this;
+ $nil = $this->graph->resource('rdf:nil');
+ while (($rest = $node->get('rdf:rest')) and $rest !== $nil and (is_null($offset) or ($position < $offset))) {
+ $node = $rest;
+ $position++;
+ }
+ return array($node, $position);
+ }
+
+ /** Counts the number of items in the collection
+ *
+ * Note that this is an slow method - it is more efficient to use
+ * the iterator interface, if you can.
+ *
+ * @return integer The number of items in the collection
+ */
+ public function count()
+ {
+ // Find the end of the collection
+ list($node, $position) = $this->getCollectionNode(null);
+ if (!$node->hasProperty('rdf:first')) {
+ return 0;
+ } else {
+ return $position;
+ }
+ }
+
+ /** Append an item to the end of the collection
+ *
+ * @param mixed $value The value to append
+ * @return integer The number of values appended (1 or 0)
+ */
+ public function append($value)
+ {
+ // Find the end of the collection
+ list($node, $position) = $this->getCollectionNode(null);
+ $rest = $node->get('rdf:rest');
+
+ if ($node === $this and is_null($rest)) {
+ $node->set('rdf:first', $value);
+ $node->addResource('rdf:rest', 'rdf:nil');
+ } else {
+ $new = $this->graph->newBnode();
+ $node->set('rdf:rest', $new);
+ $new->add('rdf:first', $value);
+ $new->addResource('rdf:rest', 'rdf:nil');
+ }
+
+ return 1;
+ }
+
+ /** Array Access: check if a position exists in collection using array syntax
+ *
+ * Example: isset($list[2])
+ */
+ public function offsetExists($offset)
+ {
+ if (is_int($offset) and $offset > 0) {
+ list($node, $position) = $this->getCollectionNode($offset);
+ return ($node and $position === $offset and $node->hasProperty('rdf:first'));
+ } else {
+ throw new InvalidArgumentException(
+ "Collection offset must be a positive integer"
+ );
+ }
+ }
+
+ /** Array Access: get an item at a specified position in collection using array syntax
+ *
+ * Example: $item = $list[2];
+ */
+ public function offsetGet($offset)
+ {
+ if (is_int($offset) and $offset > 0) {
+ list($node, $position) = $this->getCollectionNode($offset);
+ if ($node and $position === $offset) {
+ return $node->get('rdf:first');
+ }
+ } else {
+ throw new InvalidArgumentException(
+ "Collection offset must be a positive integer"
+ );
+ }
+ }
+
+ /**
+ * Array Access: set an item at a positon in collection using array syntax
+ *
+ * Example: $list[2] = $item;
+ */
+ public function offsetSet($offset, $value)
+ {
+ if (is_null($offset)) {
+ // No offset - append to end of collection
+ $this->append($value);
+ } elseif (is_int($offset) and $offset > 0) {
+ list($node, $position) = $this->getCollectionNode($offset);
+
+ // Create nodes, if they are missing
+ while ($position < $offset) {
+ $new = $this->graph->newBnode();
+ $node->set('rdf:rest', $new);
+ $new->addResource('rdf:rest', 'rdf:nil');
+ $node = $new;
+ $position++;
+ }
+
+ // Terminate the list
+ if (!$node->hasProperty('rdf:rest')) {
+ $node->addResource('rdf:rest', 'rdf:nil');
+ }
+
+ return $node->set('rdf:first', $value);
+ } else {
+ throw new InvalidArgumentException(
+ "Collection offset must be a positive integer"
+ );
+ }
+ }
+
+ /**
+ * Array Access: delete an item at a specific postion using array syntax
+ *
+ * Example: unset($seq[2]);
+ */
+ public function offsetUnset($offset)
+ {
+ if (is_int($offset) and $offset > 0) {
+ list($node, $position) = $this->getCollectionNode($offset);
+ } else {
+ throw new InvalidArgumentException(
+ "Collection offset must be a positive integer"
+ );
+ }
+
+ // Does the item exist?
+ if ($node and $position === $offset) {
+ $nil = $this->graph->resource('rdf:nil');
+ if ($position === 1) {
+ $rest = $node->get('rdf:rest');
+ if ($rest and $rest !== $nil) {
+ // Move second value, so we can keep the head of list
+ $node->set('rdf:first', $rest->get('rdf:first'));
+ $node->set('rdf:rest', $rest->get('rdf:rest'));
+ $rest->delete('rdf:first');
+ $rest->delete('rdf:rest');
+ } else {
+ // Just remove the value
+ $node->delete('rdf:first');
+ $node->delete('rdf:rest');
+ }
+ } else {
+ // Remove the value and re-link the list
+ $node->delete('rdf:first');
+ $rest = $node->get('rdf:rest');
+ $previous = $node->get('^rdf:rest');
+ if (is_null($rest)) {
+ $rest = $nil;
+ }
+ if ($previous) {
+ $previous->set('rdf:rest', $rest);
+ }
+ }
+ }
+ }
+}
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Container.php b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Container.php
new file mode 100644
index 0000000..2207956
--- /dev/null
+++ b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Container.php
@@ -0,0 +1,230 @@
+<?php
+
+/**
+ * EasyRdf
+ *
+ * LICENSE
+ *
+ * Copyright (c) 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) 2013 Nicholas J Humfrey
+ * @license http://www.opensource.org/licenses/bsd-license.php
+ */
+
+/**
+ * Sub-class of EasyRdf_Resource that represents an RDF container
+ * (rdf:Alt, rdf:Bag and rdf:Seq)
+ *
+ * This class can be used to iterate through a list of items.
+ *
+ * @package EasyRdf
+ * @link http://www.w3.org/TR/xmlschema-2/#date
+ * @copyright Copyright (c) 2013 Nicholas J Humfrey
+ * @license http://www.opensource.org/licenses/bsd-license.php
+ */
+class EasyRdf_Container extends EasyRdf_Resource implements ArrayAccess, Countable, SeekableIterator
+{
+ private $position;
+
+ /** Create a new container - do not use this directly
+ *
+ * @ignore
+ */
+ public function __construct($uri, $graph)
+ {
+ $this->position = 1;
+ parent::__construct($uri, $graph);
+ }
+
+ /** Seek to a specific position in the container
+ *
+ * The first item is postion 1
+ *
+ * @param integer $position The position in the container to seek to
+ * @throws OutOfBoundsException
+ */
+ public function seek($position)
+ {
+ if (is_int($position) and $position > 0) {
+ if ($this->hasProperty('rdf:_'.$position)) {
+ $this->position = $position;
+ } else {
+ throw new OutOfBoundsException(
+ "Unable to seek to position $position in the container"
+ );
+ }
+ } else {
+ throw new InvalidArgumentException(
+ "Container position must be a positive integer"
+ );
+ }
+ }
+
+ /** Rewind the iterator back to the start of the container (item 1)
+ *
+ */
+ public function rewind()
+ {
+ $this->position = 1;
+ }
+
+ /** Return the current item in the container
+ *
+ * @return mixed The current item
+ */
+ public function current()
+ {
+ return $this->get('rdf:_'.$this->position);
+ }
+
+ /** Return the key / current position in the container
+ *
+ * @return int The current position
+ */
+ public function key()
+ {
+ return $this->position;
+ }
+
+ /** Move forward to next item in the container
+ *
+ */
+ public function next()
+ {
+ $this->position++;
+ }
+
+ /** Checks if current position is valid
+ *
+ * @return bool True if the current position is valid
+ */
+ public function valid()
+ {
+ return $this->hasProperty('rdf:_'.$this->position);
+ }
+
+ /** Counts the number of items in the container
+ *
+ * Note that this is an slow method - it is more efficient to use
+ * the iterator interface, if you can.
+ *
+ * @return integer The number of items in the container
+ */
+ public function count()
+ {
+ $pos = 1;
+ while ($this->hasProperty('rdf:_'.$pos)) {
+ $pos++;
+ }
+ return $pos - 1;
+ }
+
+ /** Append an item to the end of the container
+ *
+ * @param mixed $value The value to append
+ * @return integer The number of values appended (1 or 0)
+ */
+ public function append($value)
+ {
+ // Find the end of the list
+ $pos = 1;
+ while ($this->hasProperty('rdf:_'.$pos)) {
+ $pos++;
+ }
+
+ // Add the item
+ return $this->add('rdf:_'.$pos, $value);
+ }
+
+ /** Array Access: check if a position exists in container using array syntax
+ *
+ * Example: isset($seq[2])
+ */
+ public function offsetExists($offset)
+ {
+ if (is_int($offset) and $offset > 0) {
+ return $this->hasProperty('rdf:_'.$offset);
+ } else {
+ throw new InvalidArgumentException(
+ "Container position must be a positive integer"
+ );
+ }
+ }
+
+ /** Array Access: get an item at a specified position in container using array syntax
+ *
+ * Example: $item = $seq[2];
+ */
+ public function offsetGet($offset)
+ {
+ if (is_int($offset) and $offset > 0) {
+ return $this->get('rdf:_'.$offset);
+ } else {
+ throw new InvalidArgumentException(
+ "Container position must be a positive integer"
+ );
+ }
+ }
+
+ /**
+ * Array Access: set an item at a positon in container using array syntax
+ *
+ * Example: $seq[2] = $item;
+ *
+ * Warning: creating gaps in the sequence will result in unexpected behavior
+ */
+ public function offsetSet($offset, $value)
+ {
+ if (is_int($offset) and $offset > 0) {
+ return $this->set('rdf:_'.$offset, $value);
+ } elseif (is_null($offset)) {
+ return $this->append($value);
+ } else {
+ throw new InvalidArgumentException(
+ "Container position must be a positive integer"
+ );
+ }
+ }
+
+ /**
+ * Array Access: delete an item at a specific postion using array syntax
+ *
+ * Example: unset($seq[2]);
+ *
+ * Warning: creating gaps in the sequence will result in unexpected behavior
+ */
+ public function offsetUnset($offset)
+ {
+ if (is_int($offset) and $offset > 0) {
+ return $this->delete('rdf:_'.$offset);
+ } else {
+ throw new InvalidArgumentException(
+ "Container position must be a positive integer"
+ );
+ }
+ }
+}
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Exception.php b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Exception.php
index 71530ca..25090a5 100644
--- a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Exception.php
+++ b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Exception.php
@@ -5,7 +5,7 @@
*
* LICENSE
*
- * Copyright (c) 2009-2010 Nicholas J Humfrey. All rights reserved.
+ * 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:
@@ -31,9 +31,8 @@
* POSSIBILITY OF SUCH DAMAGE.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2010 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
- * @version $Id$
*/
/**
@@ -42,7 +41,7 @@
* All exceptions thrown by EasyRdf are an instance of this class.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2010 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
*/
class EasyRdf_Exception extends Exception
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Format.php b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Format.php
index f5bbd5a..031a51d 100644
--- a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Format.php
+++ b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Format.php
@@ -5,7 +5,7 @@
*
* LICENSE
*
- * Copyright (c) 2009-2012 Nicholas J Humfrey. All rights reserved.
+ * 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:
@@ -31,9 +31,8 @@
* POSSIBILITY OF SUCH DAMAGE.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
- * @version $Id$
*/
/**
@@ -44,7 +43,7 @@
* format.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
*/
class EasyRdf_Format
@@ -247,8 +246,8 @@ class EasyRdf_Format
}
}
- // Then try and guess by the first 255 bytes of content
- $short = substr($data, 0, 255);
+ // Then try and guess by the first 1024 bytes of content
+ $short = substr($data, 0, 1024);
if (preg_match("/^\s*\{/", $short)) {
return self::getFormat('json');
} elseif (preg_match("/<rdf:/i", $short)) {
@@ -353,7 +352,9 @@ class EasyRdf_Format
public function getDefaultMimeType()
{
$types = array_keys($this->mimeTypes);
- return $types[0];
+ if (isset($types[0])) {
+ return $types[0];
+ }
}
/** Get all the registered mime types for a format object
@@ -388,7 +389,9 @@ class EasyRdf_Format
*/
public function getDefaultExtension()
{
- return $this->extensions[0];
+ if (isset($this->extensions[0])) {
+ return $this->extensions[0];
+ }
}
/** Get all the registered file extensions (filename suffix) for a format object
@@ -519,7 +522,11 @@ class EasyRdf_Format
EasyRdf_Format::register(
'php',
'RDF/PHP',
- 'http://n2.talis.com/wiki/RDF_PHP_Specification'
+ 'http://n2.talis.com/wiki/RDF_PHP_Specification',
+ array(
+ 'application/x-httpd-php-source' => 1.0
+ ),
+ array('phps')
);
EasyRdf_Format::register(
@@ -537,9 +544,10 @@ EasyRdf_Format::register(
EasyRdf_Format::register(
'ntriples',
'N-Triples',
- 'http://www.w3.org/TR/rdf-testcases/#ntriples',
+ 'http://www.w3.org/TR/n-triples/',
array(
- 'text/plain' => 1.0,
+ 'application/n-triples' => 1.0,
+ 'text/plain' => 0.9,
'text/ntriples' => 0.9,
'application/ntriples' => 0.9,
'application/x-ntriples' => 0.9
@@ -667,6 +675,7 @@ EasyRdf_Format::registerParser('turtle', 'EasyRdf_Parser_Turtle');
EasyRdf_Format::registerParser('rdfa', 'EasyRdf_Parser_Rdfa');
EasyRdf_Format::registerSerialiser('json', 'EasyRdf_Serialiser_Json');
+EasyRdf_Format::registerSerialiser('jsonld', 'EasyRdf_Serialiser_JsonLd');
EasyRdf_Format::registerSerialiser('n3', 'EasyRdf_Serialiser_Turtle');
EasyRdf_Format::registerSerialiser('ntriples', 'EasyRdf_Serialiser_Ntriples');
EasyRdf_Format::registerSerialiser('php', 'EasyRdf_Serialiser_RdfPhp');
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Graph.php b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Graph.php
index 5bb3ab1..ba8ca82 100644
--- a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Graph.php
+++ b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Graph.php
@@ -5,7 +5,7 @@
*
* LICENSE
*
- * Copyright (c) 2009-2012 Nicholas J Humfrey. All rights reserved.
+ * 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:
@@ -31,16 +31,15 @@
* POSSIBILITY OF SUCH DAMAGE.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
- * @version $Id$
*/
/**
* Container for collection of EasyRdf_Resources.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
*/
class EasyRdf_Graph
@@ -158,21 +157,27 @@ class EasyRdf_Graph
*/
protected function classForResource($uri)
{
- $resClass = 'EasyRdf_Resource';
- $rdfType = EasyRdf_Namespace::expand('rdf:type');
+ $rdfType = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type';
if (isset($this->index[$uri][$rdfType])) {
foreach ($this->index[$uri][$rdfType] as $type) {
if ($type['type'] == 'uri' or $type['type'] == 'bnode') {
$class = EasyRdf_TypeMapper::get($type['value']);
if ($class != null) {
- $resClass = $class;
- break;
+ return $class;
}
}
-
}
}
- return $resClass;
+
+ // Parsers don't typically add a rdf:type to rdf:List, so we have to
+ // do a bit of 'inference' here using properties.
+ if ($uri == 'http://www.w3.org/1999/02/22-rdf-syntax-ns#nil' or
+ isset($this->index[$uri]['http://www.w3.org/1999/02/22-rdf-syntax-ns#first']) or
+ isset($this->index[$uri]['http://www.w3.org/1999/02/22-rdf-syntax-ns#rest'])
+ ) {
+ return 'EasyRdf_Collection';
+ }
+ return 'EasyRdf_Resource';
}
/**
@@ -341,7 +346,9 @@ class EasyRdf_Graph
public function resources()
{
foreach ($this->index as $subject => $properties) {
- $this->resource($subject);
+ if (!isset($this->resources[$subject])) {
+ $this->resource($subject);
+ }
}
foreach ($this->revIndex as $object => $properties) {
@@ -491,13 +498,11 @@ class EasyRdf_Graph
{
if (isset($value)) {
if (is_object($value)) {
- if (method_exists($value, 'toArray')) {
- $value = $value->toArray();
- } else {
- throw new InvalidArgumentException(
- "\$value should respond to the method toArray()"
- );
+ if (!method_exists($value, 'toRdfPhp')) {
+ // Convert to a literal object
+ $value = EasyRdf_Literal::create($value);
}
+ $value = $value->toRdfPhp();
} elseif (is_array($value)) {
if (!isset($value['type'])) {
throw new InvalidArgumentException(
@@ -779,7 +784,7 @@ class EasyRdf_Graph
$objects = $results;
}
- return $objects;
+ return $results;
}
/** Get all values for a single property of a resource
@@ -866,7 +871,7 @@ class EasyRdf_Graph
return $this->all($type, '^rdf:type');
}
- /** Count all values for a property of a resource
+ /** Count the number of values for a property of a resource
*
* @param string $resource The URI of the resource (e.g. http://example.com/joe#me)
* @param string $property The name of the property (e.g. foaf:name)
@@ -874,7 +879,7 @@ class EasyRdf_Graph
* @param string $lang The language to filter by (e.g. en)
* @return integer The number of values for this property
*/
- public function count($resource, $property, $type = null, $lang = null)
+ public function countValues($resource, $property, $type = null, $lang = null)
{
return count($this->all($resource, $property, $type, $lang));
}
@@ -966,25 +971,10 @@ class EasyRdf_Graph
$added += $this->addLiteral($resource, $property, $v, $lang);
}
return $added;
- } else {
- if ($lang) {
- $value = array(
- 'type' => 'literal',
- 'value' => $value,
- 'lang' => $lang
- );
- } else {
- $value = array(
- 'type' => 'literal',
- 'value' => $value,
- 'datatype' => EasyRdf_Literal::getDatatypeForValue($value)
- );
- if (empty($value['datatype'])) {
- unset($value['datatype']);
- }
- }
- return $this->add($resource, $property, $value);
+ } elseif (!is_object($value) or !$value instanceof EasyRdf_Literal) {
+ $value = EasyRdf_Literal::create($value, $lang);
}
+ return $this->add($resource, $property, $value);
}
/** Add a resource as a property of another resource
@@ -1047,11 +1037,42 @@ class EasyRdf_Graph
public function delete($resource, $property, $value = null)
{
$this->checkResourceParam($resource);
+
+ if (is_object($property) and $property instanceof EasyRdf_Resource) {
+ return $this->deleteSingleProperty($resource, $property->getUri(), $value);
+ } elseif (is_string($property) and preg_match('|^(\^?)<(.+)>|', $property, $matches)) {
+ return $this->deleteSingleProperty($resource, "$matches[1]$matches[2]", $value);
+ } elseif ($property === null or !is_string($property)) {
+ throw new InvalidArgumentException(
+ "\$property should be a string or EasyRdf_Resource and cannot be null"
+ );
+ } elseif ($property === '') {
+ throw new InvalidArgumentException(
+ "\$property cannot be an empty string"
+ );
+ }
+
+ // FIXME: finish implementing property paths for delete
+ return $this->deleteSingleProperty($resource, $property, $value);
+ }
+
+
+ /** Delete a property (or optionally just a specific value)
+ *
+ * @param mixed $resource The resource to delete the property from
+ * @param string $property The name of the property (e.g. foaf:name)
+ * @param mixed $value The value to delete (null to delete all values)
+ * @return integer The number of values deleted
+ *
+ * @ignore
+ */
+ public function deleteSingleProperty($resource, $property, $value = null)
+ {
+ $this->checkResourceParam($resource);
$this->checkSinglePropertyParam($property, $inverse);
$this->checkValueParam($value);
$count = 0;
- $property = EasyRdf_Namespace::expand($property);
if (isset($this->index[$resource][$property])) {
foreach ($this->index[$resource][$property] as $k => $v) {
if (!$value or $v == $value) {
@@ -1263,16 +1284,17 @@ class EasyRdf_Graph
* Example:
* $turtle = $graph->serialise('turtle');
*
- * @param mixed $format The format to serialise to
+ * @param mixed $format The format to serialise to
+ * @param array $options Serialiser-specific options, for fine-tuning the output
* @return mixed The serialised graph
*/
- public function serialise($format)
+ public function serialise($format, array $options = array())
{
if (!$format instanceof EasyRdf_Format) {
$format = EasyRdf_Format::getFormat($format);
}
$serialiser = $format->newSerialiser();
- return $serialiser->serialise($this, $format->getName());
+ return $serialiser->serialise($this, $format->getName(), $options);
}
/** Return a human readable view of all the resources in the graph
@@ -1281,13 +1303,13 @@ class EasyRdf_Graph
* return a pretty-print view of all the resources and their
* properties.
*
- * @param boolean $html Set to true to format the dump using HTML
+ * @param string $format Either 'html' or 'text'
* @return string
*/
- public function dump($html = true)
+ public function dump($format = 'html')
{
$result = '';
- if ($html) {
+ if ($format == 'html') {
$result .= "<div style='font-family:arial; font-weight: bold; padding:0.5em; ".
"color: black; background-color:lightgrey;border:dashed 1px grey;'>".
"Graph: ". $this->uri . "</div>\n";
@@ -1296,7 +1318,7 @@ class EasyRdf_Graph
}
foreach ($this->index as $resource => $properties) {
- $result .= $this->dumpResource($resource, $html);
+ $result .= $this->dumpResource($resource, $format);
}
return $result;
}
@@ -1307,10 +1329,10 @@ class EasyRdf_Graph
* print a resource and its properties.
*
* @param mixed $resource The resource to dump
- * @param boolean $html Set to true to format the dump using HTML
+ * @param string $format Either 'html' or 'text'
* @return string
*/
- public function dumpResource($resource, $html = true)
+ public function dumpResource($resource, $format = 'html')
{
$this->checkResourceParam($resource, true);
@@ -1325,9 +1347,9 @@ class EasyRdf_Graph
$olist = array();
foreach ($values as $value) {
if ($value['type'] == 'literal') {
- $olist []= EasyRdf_Utils::dumpLiteralValue($value, $html, 'black');
+ $olist []= EasyRdf_Utils::dumpLiteralValue($value, $format, 'black');
} else {
- $olist []= EasyRdf_Utils::dumpResourceValue($value['value'], $html, 'blue');
+ $olist []= EasyRdf_Utils::dumpResourceValue($value['value'], $format, 'blue');
}
}
@@ -1335,7 +1357,7 @@ class EasyRdf_Graph
if ($pstr == null) {
$pstr = $property;
}
- if ($html) {
+ if ($format == 'html') {
$plist []= "<span style='font-size:130%'>&rarr;</span> ".
"<span style='text-decoration:none;color:green'>".
htmlentities($pstr) . "</span> ".
@@ -1346,11 +1368,11 @@ class EasyRdf_Graph
}
}
- if ($html) {
- return "<div id='".htmlentities($resource)."' " .
+ if ($format == 'html') {
+ return "<div id='".htmlentities($resource, ENT_QUOTES)."' " .
"style='font-family:arial; padding:0.5em; ".
"background-color:lightgrey;border:dashed 1px grey;'>\n".
- "<div>".EasyRdf_Utils::dumpResourceValue($resource, true, 'blue')." ".
+ "<div>".EasyRdf_Utils::dumpResourceValue($resource, $format, 'blue')." ".
"<span style='font-size: 0.8em'>(".
$this->classForResource($resource).")</span></div>\n".
"<div style='padding-left: 3em'>\n".
@@ -1502,7 +1524,7 @@ class EasyRdf_Graph
if ($resource) {
return $this->get(
$resource,
- 'skos:prefLabel|rdfs:label|foaf:name|dc:title|dc11:title',
+ 'skos:prefLabel|rdfs:label|foaf:name|rss:title|dc:title|dc11:title',
'literal',
$lang
);
@@ -1534,7 +1556,7 @@ class EasyRdf_Graph
*
* @return array The contents of the graph as an array.
*/
- public function toArray()
+ public function toRdfPhp()
{
return $this->index;
}
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/GraphStore.php b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/GraphStore.php
index 3fcc7b4..1909575 100644
--- a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/GraphStore.php
+++ b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/GraphStore.php
@@ -5,7 +5,7 @@
*
* LICENSE
*
- * Copyright (c) 2009-2011 Nicholas J Humfrey. All rights reserved.
+ * 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:
@@ -31,9 +31,8 @@
* POSSIBILITY OF SUCH DAMAGE.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2011 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
- * @version $Id$
*/
/**
@@ -41,7 +40,7 @@
* Implementation of the SPARQL 1.1 Graph Store HTTP Protocol.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2011 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
*/
class EasyRdf_GraphStore
@@ -116,7 +115,6 @@ class EasyRdf_GraphStore
$client->setMethod($method);
$client->setRawData($data);
$client->setHeaders('Content-Type', $mimeType);
- $client->setHeaders('Content-Length', strlen($data));
$response = $client->request();
if (!$response->isSuccessful()) {
throw new EasyRdf_Exception(
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Http.php b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Http.php
index c8a1d3d..47e8bdb 100644
--- a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Http.php
+++ b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Http.php
@@ -5,7 +5,7 @@
*
* LICENSE
*
- * Copyright (c) 2009-2011 Nicholas J Humfrey. All rights reserved.
+ * 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:
@@ -31,9 +31,8 @@
* POSSIBILITY OF SUCH DAMAGE.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2011 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
- * @version $Id$
*/
@@ -41,7 +40,7 @@
* Static class to set the HTTP client used by EasyRdf
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2011 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
*/
class EasyRdf_Http
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Http/Client.php b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Http/Client.php
index 57c6fae..f6b4be8 100644
--- a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Http/Client.php
+++ b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Http/Client.php
@@ -5,7 +5,7 @@
*
* LICENSE
*
- * Copyright (c) 2009-2012 Nicholas J Humfrey. All rights reserved.
+ * Copyright (c) 2009-2013 Nicholas J Humfrey. All rights reserved.
* Copyright (c) 2005-2009 Zend Technologies USA Inc.
*
* Redistribution and use in source and binary forms, with or without
@@ -32,10 +32,9 @@
* POSSIBILITY OF SUCH DAMAGE.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* Copyright (c) 2005-2009 Zend Technologies USA Inc.
* @license http://www.opensource.org/licenses/bsd-license.php
- * @version $Id$
*/
/**
@@ -44,7 +43,7 @@
* implementation try Zend_Http_Client.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
*/
class EasyRdf_Http_Client
@@ -426,6 +425,9 @@ class EasyRdf_Http_Client
// Write the request
$path = $uri['path'];
+ if (empty($path)) {
+ $path = '/';
+ }
if (isset($uri['query'])) {
$path .= '?' . $uri['query'];
}
@@ -529,7 +531,7 @@ class EasyRdf_Http_Client
$headers[] = "User-Agent: {$this->config['useragent']}";
}
- // If we have _rawPostData set, set the content-length header
+ // If we have rawPostData set, set the content-length header
if (isset($this->rawPostData)) {
$headers[] = "Content-Length: ".strlen($this->rawPostData);
}
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Http/Response.php b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Http/Response.php
index 2abe00a..80edfc2 100644
--- a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Http/Response.php
+++ b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Http/Response.php
@@ -5,7 +5,7 @@
*
* LICENSE
*
- * Copyright (c) 2009-2010 Nicholas J Humfrey.
+ * Copyright (c) 2009-2013 Nicholas J Humfrey.
* Copyright (c) 2005-2009 Zend Technologies USA Inc.
* All rights reserved.
*
@@ -33,17 +33,16 @@
* POSSIBILITY OF SUCH DAMAGE.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2010 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @copyright Copyright (c) 2005-2009 Zend Technologies USA Inc.
* @license http://www.opensource.org/licenses/bsd-license.php
- * @version $Id$
*/
/**
* Class that represents an HTTP 1.0 / 1.1 response message.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2010 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* Copyright (c) 2005-2009 Zend Technologies USA Inc.
* @license http://www.opensource.org/licenses/bsd-license.php
*/
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Isomorphic.php b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Isomorphic.php
new file mode 100644
index 0000000..5b46125
--- /dev/null
+++ b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Isomorphic.php
@@ -0,0 +1,436 @@
+<?php
+
+/**
+ * EasyRdf
+ *
+ * LICENSE
+ *
+ * Copyright (c) 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) 2013 Nicholas J Humfrey
+ * @license http://www.opensource.org/licenses/bsd-license.php
+ */
+
+/**
+ * Functions for comparing two graphs with each other
+ *
+ * Based on rdf-isomorphic.rb by Ben Lavender:
+ * https://github.com/ruby-rdf/rdf-isomorphic
+ *
+ * @package EasyRdf
+ * @copyright Copyright (c) 2013 Nicholas J Humfrey
+ * @license http://www.opensource.org/licenses/bsd-license.php
+ */
+class EasyRdf_Isomorphic
+{
+ /**
+ * Check if one graph is isomorphic (equal) to another graph
+ *
+ * For example:
+ * $graphA = EasyRdf_Graph::newAndLoad('http://example.com/a.ttl');
+ * $graphB = EasyRdf_Graph::newAndLoad('http://example.com/b.ttl');
+ * if (EasyRdf_Isomorphic::isomorphic($graphA, $graphB)) print "Equal!";
+ *
+ * @param object EasyRdf_Graph $graphA The first graph to be compared
+ * @param object EasyRdf_Graph $graphB The second graph to be compared
+ * @return boolean True if the two graphs are isomorphic
+ */
+ public static function isomorphic($graphA, $graphB)
+ {
+ return is_array(self::bijectionBetween($graphA, $graphB));
+ }
+
+ /**
+ * Returns an associative array of bnode identifiers representing an isomorphic
+ * bijection of one EasyRdf_Graph to another EasyRdf_Graph's blank nodes or
+ * null if a bijection cannot be found.
+ *
+ * @param object EasyRdf_Graph $graphA The first graph to be compared
+ * @param object EasyRdf_Graph $graphB The second graph to be compared
+ * @return array bnode mapping from $graphA to $graphB
+ */
+ public static function bijectionBetween($graphA, $graphB)
+ {
+ $bnodesA = array();
+ $bnodesB = array();
+ $statementsA = array();
+ $statementsB = array();
+
+ // Quick initial check: are there differing numbers of subjects?
+ if (self::countSubjects($graphA) != self::countSubjects($graphB)) {
+ return null;
+ }
+
+ // Check if all the statements in Graph A exist in Graph B
+ $groundedStatementsMatch = self::groundedStatementsMatch($graphA, $graphB, $bnodesA, $statementsA);
+
+ if ($groundedStatementsMatch) {
+ // Check if all the statements in Graph B exist in Graph A
+ $groundedStatementsMatch = self::groundedStatementsMatch($graphB, $graphA, $bnodesB, $statementsB);
+ }
+
+ if ($groundedStatementsMatch === false) {
+ // The grounded statements do not match
+ return null;
+ } elseif (count($bnodesA) > 0 or count($bnodesB > 0)) {
+ // There are blank nodes - build a bi-jection
+ return self::buildBijectionTo($statementsA, $bnodesA, $statementsB, $bnodesB);
+ } else {
+ // No bnodes and the grounded statements match
+ return array();
+ }
+ }
+
+ /**
+ * Count the number of subjects in a graph
+ * @ignore
+ */
+ private static function countSubjects($graph)
+ {
+ return count($graph->toRdfPhp());
+ }
+
+ /**
+ * Check if all the statements in $graphA also appear in $graphB
+ * @ignore
+ */
+ private static function groundedStatementsMatch($graphA, $graphB, &$bnodes, &$anonStatements)
+ {
+ $groundedStatementsMatch = true;
+
+ foreach ($graphA->toRdfPhp() as $subject => $properties) {
+ if (substr($subject, 0, 2) == '_:') {
+ array_push($bnodes, $subject);
+ $subjectIsBnode = true;
+ } else {
+ $subjectIsBnode = false;
+ }
+
+ foreach ($properties as $property => $values) {
+ foreach ($values as $value) {
+ if ($value['type'] == 'uri' and substr($value['value'], 0, 2) == '_:') {
+ array_push($bnodes, $value['value']);
+ $objectIsBnode = true;
+ } else {
+ $objectIsBnode = false;
+ }
+
+ if ($groundedStatementsMatch and
+ $subjectIsBnode === false and
+ $objectIsBnode === false and
+ $graphB->hasProperty($subject, $property, $value) === false
+ ) {
+ $groundedStatementsMatch = false;
+ }
+
+ if ($subjectIsBnode or $objectIsBnode) {
+ array_push(
+ $anonStatements,
+ array(
+ array('type' => $subjectIsBnode ? 'bnode' : 'uri', 'value' => $subject),
+ array('type' => 'uri', 'value' => $property),
+ $value
+ )
+ );
+ }
+ }
+ }
+ }
+
+ return $groundedStatementsMatch;
+ }
+
+ /**
+ * The main recursive bijection algorithm.
+ *
+ * This algorithm is very similar to the one explained by Jeremy Carroll in
+ * http://www.hpl.hp.com/techreports/2001/HPL-2001-293.pdf. Page 12 has the
+ * relevant pseudocode.
+ *
+ * @ignore
+ */
+ private static function buildBijectionTo
+ (
+ $statementsA,
+ $nodesA,
+ $statementsB,
+ $nodesB,
+ $groundedHashesA = array(),
+ $groundedHashesB = array()
+ ) {
+
+ // Create a hash signature of every node, based on the signature of
+ // statements it exists in.
+ // We also save hashes of nodes that cannot be reliably known; we will use
+ // that information to eliminate possible recursion combinations.
+ //
+ // Any mappings given in the method parameters are considered grounded.
+ list($hashesA, $ungroundedHashesA) = self::hashNodes($statementsA, $nodesA, $groundedHashesA);
+ list($hashesB, $ungroundedHashesB) = self::hashNodes($statementsB, $nodesB, $groundedHashesB);
+
+ // Grounded hashes are built at the same rate between the two graphs (if
+ // they are isomorphic). If there exists a grounded node in one that is
+ // not in the other, we can just return. Ungrounded nodes might still
+ // conflict, so we don't check them. This is a little bit messy in the
+ // middle of the method, and probably slows down isomorphic checks, but
+ // prevents almost-isomorphic cases from getting nutty.
+ foreach ($hashesA as $nodeA => $hashA) {
+ if (!in_array($hashA, $hashesB)) {
+ return null;
+ }
+ }
+ foreach ($hashesB as $nodeB => $hashB) {
+ if (!in_array($hashB, $hashesA)) {
+ return null;
+ }
+ }
+
+ // Using the created hashes, map nodes to other_nodes
+ // Ungrounded hashes will also be equal, but we keep the distinction
+ // around for when we recurse later (we only recurse on ungrounded nodes)
+ $bijection = array();
+ foreach ($nodesA as $nodeA) {
+ $foundNode = null;
+ foreach ($ungroundedHashesB as $nodeB => $hashB) {
+ if ($ungroundedHashesA[$nodeA] == $hashB) {
+ $foundNode = $nodeB;
+ }
+ }
+
+ if ($foundNode) {
+ $bijection[$nodeA] = $foundNode;
+
+ // Deletion is required to keep counts even; two nodes with identical
+ // signatures can biject to each other at random.
+ unset($ungroundedHashesB[$foundNode]);
+ }
+ }
+
+ // bijection is now a mapping of nodes to other_nodes. If all are
+ // accounted for on both sides, we have a bijection.
+ //
+ // If not, we will speculatively mark pairs with matching ungrounded
+ // hashes as bijected and recurse.
+ $bijectionA = array_keys($bijection);
+ $bijectionB = array_values($bijection);
+ sort($bijectionA);
+ sort($nodesA);
+ sort($bijectionB);
+ sort($nodesB);
+ if ($bijectionA != $nodesA or $bijectionB != $nodesB) {
+ $bijection = null;
+
+ foreach ($nodesA as $nodeA) {
+
+ // We don't replace grounded nodes' hashes
+ if (isset($hashesA[$nodeA])) {
+ continue;
+ }
+
+ foreach ($nodesB as $nodeB) {
+ // We don't replace grounded nodesB's hashes
+ if (isset($hashesB[$nodeB])) {
+ continue;
+ }
+
+ // The ungrounded signature must match for this to potentially work
+ if ($ungroundedHashesA[$nodeA] != $ungroundedHashesB[$nodeB]) {
+ continue;
+ }
+
+ $hash = sha1($nodeA);
+ $hashesA[$nodeA] = $hash;
+ $hashesB[$nodeB] = $hash;
+ $bijection = self::buildBijectionTo(
+ $statementsA,
+ $nodesA,
+ $statementsB,
+ $nodesA,
+ $hashesA,
+ $hashesB
+ );
+ }
+ }
+ }
+
+ return $bijection;
+ }
+
+ /**
+ * Given a set of statements, create a mapping of node => SHA1 for a given
+ * set of blank nodes. grounded_hashes is a mapping of node => SHA1 pairs
+ * that we will take as a given, and use those to make more specific
+ * signatures of other nodes.
+ *
+ * Returns a tuple of associative arrats: one of grounded hashes, and one of all
+ * hashes. grounded hashes are based on non-blank nodes and grounded blank
+ * nodes, and can be used to determine if a node's signature matches
+ * another.
+ *
+ * @ignore
+ */
+ private static function hashNodes($statements, $nodes, $groundedHahes)
+ {
+ $hashes = $groundedHahes;
+ $ungroundedHashes = array();
+ $hashNeeded = true;
+
+ // We may have to go over the list multiple times. If a node is marked as
+ // grounded, other nodes can then use it to decide their own state of
+ // grounded.
+ while ($hashNeeded) {
+ $startingGroundedNodes = count($hashes);
+ foreach ($nodes as $node) {
+ if (!isset($hashes[$node])) {
+ $hash = self::nodeHashFor($node, $statements, $hashes);
+ if (self::nodeIsGrounded($node, $statements, $hashes)) {
+ $hashes[$node] = $hash;
+ }
+ }
+ $ungroundedHashes[$node] = $hash;
+ }
+
+ // after going over the list, any nodes with a unique hash can be marked
+ // as grounded, even if we have not tied them back to a root yet.
+ $uniques = array();
+ foreach ($ungroundedHashes as $node => $hash) {
+ $uniques[$hash] = isset($uniques[$hash]) ? false : $node;
+ }
+ foreach ($uniques as $hash => $node) {
+ if ($node) {
+ $hashes[$node] = $hash;
+ }
+ }
+ $hashNeeded = ($startingGroundedNodes != count($hashes));
+ }
+
+ return array($hashes, $ungroundedHashes);
+ }
+
+ /**
+ * Generate a hash for a node based on the signature of the statements it
+ * appears in. Signatures consist of grounded elements in statements
+ * associated with a node, that is, anything but an ungrounded anonymous
+ * node. Creating the hash is simply hashing a sorted list of each
+ * statement's signature, which is itself a concatenation of the string form
+ * of all grounded elements.
+ *
+ * Nodes other than the given node are considered grounded if they are a
+ * member in the given hash.
+ *
+ * Returns a tuple consisting of grounded being true or false and the string
+ * for the hash
+ *
+ * @ignore
+ */
+ private static function nodeHashFor($node, $statements, $hashes)
+ {
+ $statement_signatures = array();
+ foreach ($statements as $statement) {
+ foreach ($statement as $n) {
+ if ($n['type'] != 'literal' and $n['value'] == $node) {
+ array_push(
+ $statement_signatures,
+ self::hashStringFor($statement, $hashes, $node)
+ );
+ }
+ }
+ }
+
+ // Note that we sort the signatures--without a canonical ordering,
+ // we might get different hashes for equivalent nodes
+ sort($statement_signatures);
+
+ // Convert statements into one long string and hash it
+ return sha1(implode('', $statement_signatures));
+ }
+
+ /**
+ * Returns true if a given node is grounded
+ * A node is groundd if it is not a blank node or it is included
+ * in the given mapping of grounded nodes.
+ *
+ * @ignore
+ */
+ private static function nodeIsGrounded($node, $statements, $hashes)
+ {
+ $grounded = true;
+ foreach ($statements as $statement) {
+ if (in_array($node, $statement)) {
+ foreach ($statement as $resource) {
+ if ($node['type'] != 'bnode' or
+ isset($hashes[$node['value']]) or
+ $resource == $node
+ ) {
+ $grounded = false;
+ }
+ }
+ }
+ }
+ return $grounded;
+ }
+
+ /**
+ * Provide a string signature for the given statement, collecting
+ * string signatures for grounded node elements.
+ *
+ * @ignore
+ */
+ private static function hashStringFor($statement, $hashes, $node)
+ {
+ $str = "";
+ foreach ($statement as $r) {
+ $str .= self::stringForNode($r, $hashes, $node);
+ }
+ return $str;
+ }
+
+ /**
+ * Provides a string for the given node for use in a string signature
+ * Non-anonymous nodes will return their string form. Grounded anonymous
+ * nodes will return their hashed form.
+ *
+ * @ignore
+ */
+ private static function stringForNode($node, $hashes, $target)
+ {
+ if (is_null($node)) {
+ return "";
+ } elseif ($node['type'] == 'bnode') {
+ if ($node['value'] == $target) {
+ return "itself";
+ } elseif (isset($hashes[$node['value']])) {
+ return $hashes[$node['value']];
+ } else {
+ return "a blank node";
+ }
+ } else {
+ $s = new EasyRdf_Serialiser_Ntriples();
+ return $s->serialiseValue($node);
+ }
+ }
+}
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal.php b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal.php
index eadf2a2..8030e4e 100644
--- a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal.php
+++ b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal.php
@@ -5,7 +5,7 @@
*
* LICENSE
*
- * Copyright (c) 2009-2012 Nicholas J Humfrey. All rights reserved.
+ * 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:
@@ -31,16 +31,15 @@
* POSSIBILITY OF SUCH DAMAGE.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
- * @version $Id$
*/
/**
* Class that represents an RDF Literal
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
*/
class EasyRdf_Literal
@@ -91,8 +90,8 @@ class EasyRdf_Literal
$value = isset($value['value']) ? $value['value'] : null;
}
- if (empty($datatype)) {
- if (empty($lang)) {
+ if (is_null($datatype) or $datatype === '') {
+ if (is_null($lang) or $lang === '') {
// Automatic datatype selection
$datatype = self::getDatatypeForValue($value);
}
@@ -275,7 +274,7 @@ class EasyRdf_Literal
*
* @return array The properties of the literal
*/
- public function toArray()
+ public function toRdfPhp()
{
$array = array(
'type' => 'literal',
@@ -304,12 +303,25 @@ class EasyRdf_Literal
/** Return pretty-print view of the literal
*
- * @param bool $html Set to true to format the dump using HTML
- * @param string $color The colour of the text
+ * @param string $format Either 'html' or 'text'
+ * @param string $color The colour of the text
* @return string
*/
- public function dumpValue($html = true, $color = 'black')
+ public function dumpValue($format = 'html', $color = 'black')
{
- return EasyRdf_Utils::dumpLiteralValue($this, $html, $color);
+ return EasyRdf_Utils::dumpLiteralValue($this, $format, $color);
}
}
+
+/*
+ Register default set of datatype classes
+*/
+
+EasyRdf_Literal::setDatatypeMapping('xsd:boolean', 'EasyRdf_Literal_Boolean');
+EasyRdf_Literal::setDatatypeMapping('xsd:date', 'EasyRdf_Literal_Date');
+EasyRdf_Literal::setDatatypeMapping('xsd:dateTime', 'EasyRdf_Literal_DateTime');
+EasyRdf_Literal::setDatatypeMapping('xsd:decimal', 'EasyRdf_Literal_Decimal');
+EasyRdf_Literal::setDatatypeMapping('xsd:hexBinary', 'EasyRdf_Literal_HexBinary');
+EasyRdf_Literal::setDatatypeMapping('rdf:HTML', 'EasyRdf_Literal_HTML');
+EasyRdf_Literal::setDatatypeMapping('xsd:integer', 'EasyRdf_Literal_Integer');
+EasyRdf_Literal::setDatatypeMapping('rdf:XMLLiteral', 'EasyRdf_Literal_XML');
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/Boolean.php b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/Boolean.php
index d43863a..d8ca2ed 100644
--- a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/Boolean.php
+++ b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/Boolean.php
@@ -5,7 +5,7 @@
*
* LICENSE
*
- * Copyright (c) 2009-2012 Nicholas J Humfrey. All rights reserved.
+ * 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:
@@ -31,9 +31,8 @@
* POSSIBILITY OF SUCH DAMAGE.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
- * @version $Id$
*/
/**
@@ -41,7 +40,7 @@
*
* @package EasyRdf
* @link http://www.w3.org/TR/xmlschema-2/#boolean
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
*/
class EasyRdf_Literal_Boolean extends EasyRdf_Literal
@@ -92,5 +91,3 @@ class EasyRdf_Literal_Boolean extends EasyRdf_Literal
return strtolower($this->value) === 'false' or $this->value === '0';
}
}
-
-EasyRdf_Literal::setDatatypeMapping('xsd:boolean', 'EasyRdf_Literal_Boolean');
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/Date.php b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/Date.php
index fb1a687..0e05acf 100644
--- a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/Date.php
+++ b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/Date.php
@@ -5,7 +5,7 @@
*
* LICENSE
*
- * Copyright (c) 2009-2012 Nicholas J Humfrey. All rights reserved.
+ * 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:
@@ -31,9 +31,8 @@
* POSSIBILITY OF SUCH DAMAGE.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
- * @version $Id$
*/
/**
@@ -41,7 +40,7 @@
*
* @package EasyRdf
* @link http://www.w3.org/TR/xmlschema-2/#date
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
*/
class EasyRdf_Literal_Date extends EasyRdf_Literal
@@ -49,6 +48,7 @@ class EasyRdf_Literal_Date extends EasyRdf_Literal
/** Constructor for creating a new date literal
*
* If the value is a DateTime object, then it will be converted to the xsd:date format.
+ * If no value is given or is is null, then the current date is used.
*
* @see DateTime
*
@@ -57,8 +57,13 @@ class EasyRdf_Literal_Date extends EasyRdf_Literal
* @param string $datatype Optional datatype (default 'xsd:date')
* @return object EasyRdf_Literal_Date
*/
- public function __construct($value, $lang = null, $datatype = null)
+ public function __construct($value = null, $lang = null, $datatype = null)
{
+ // If $value is null, use today's date
+ if (is_null($value)) {
+ $value = new DateTime('today');
+ }
+
// Convert DateTime object into string
if ($value instanceof DateTime) {
$value = $value->format('Y-m-d');
@@ -130,5 +135,3 @@ class EasyRdf_Literal_Date extends EasyRdf_Literal
return (int)$this->format('d');
}
}
-
-EasyRdf_Literal::setDatatypeMapping('xsd:date', 'EasyRdf_Literal_Date');
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/DateTime.php b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/DateTime.php
index 577badf..c1c602d 100644
--- a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/DateTime.php
+++ b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/DateTime.php
@@ -5,7 +5,7 @@
*
* LICENSE
*
- * Copyright (c) 2009-2012 Nicholas J Humfrey. All rights reserved.
+ * 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:
@@ -31,9 +31,8 @@
* POSSIBILITY OF SUCH DAMAGE.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
- * @version $Id$
*/
/**
@@ -41,7 +40,7 @@
*
* @package EasyRdf
* @link http://www.w3.org/TR/xmlschema-2/#date
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
*/
class EasyRdf_Literal_DateTime extends EasyRdf_Literal_Date
@@ -49,6 +48,7 @@ class EasyRdf_Literal_DateTime extends EasyRdf_Literal_Date
/** Constructor for creating a new date and time literal
*
* If the value is a DateTime object, then it will be converted to the xsd:dateTime format.
+ * If no value is given or is is null, then the current time is used.
*
* @see DateTime
*
@@ -57,12 +57,17 @@ class EasyRdf_Literal_DateTime extends EasyRdf_Literal_Date
* @param string $datatype Optional datatype (default 'xsd:dateTime')
* @return object EasyRdf_Literal_DateTime
*/
- public function __construct($value, $lang = null, $datatype = null)
+ public function __construct($value = null, $lang = null, $datatype = null)
{
+ // If $value is null, use 'now'
+ if (is_null($value)) {
+ $value = new DateTime('now');
+ }
+
// Convert DateTime objects into string
if ($value instanceof DateTime) {
- $iso = $value->format(DateTime::ISO8601);
- $value = preg_replace('/[\+\-]00(\:?)00$/', 'Z', $iso);
+ $atom = $value->format(DateTime::ATOM);
+ $value = preg_replace('/[\+\-]00(\:?)00$/', 'Z', $atom);
}
EasyRdf_Literal::__construct($value, null, $datatype);
@@ -110,5 +115,3 @@ class EasyRdf_Literal_DateTime extends EasyRdf_Literal_Date
return (int)$this->format('s');
}
}
-
-EasyRdf_Literal::setDatatypeMapping('xsd:dateTime', 'EasyRdf_Literal_DateTime');
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/Decimal.php b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/Decimal.php
index 680c978..59b2cd1 100644
--- a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/Decimal.php
+++ b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/Decimal.php
@@ -5,7 +5,7 @@
*
* LICENSE
*
- * Copyright (c) 2009-2012 Nicholas J Humfrey. All rights reserved.
+ * 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:
@@ -31,9 +31,8 @@
* POSSIBILITY OF SUCH DAMAGE.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
- * @version $Id$
*/
/**
@@ -41,7 +40,7 @@
*
* @package EasyRdf
* @link http://www.w3.org/TR/xmlschema-2/#decimal
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
*/
class EasyRdf_Literal_Decimal extends EasyRdf_Literal
@@ -67,5 +66,3 @@ class EasyRdf_Literal_Decimal extends EasyRdf_Literal
return (double)$this->value;
}
}
-
-EasyRdf_Literal::setDatatypeMapping('xsd:decimal', 'EasyRdf_Literal_Decimal');
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/HTML.php b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/HTML.php
index 2d0f938..a4915b7 100644
--- a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/HTML.php
+++ b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/HTML.php
@@ -33,7 +33,6 @@
* @package EasyRdf
* @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
- * @version $Id$
*/
/**
@@ -69,5 +68,3 @@ class EasyRdf_Literal_HTML extends EasyRdf_Literal
return strip_tags($this->value, $allowableTags);
}
}
-
-EasyRdf_Literal::setDatatypeMapping('rdf:HTML', 'EasyRdf_Literal_HTML');
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/HexBinary.php b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/HexBinary.php
index 2077a6e..75ed24e 100644
--- a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/HexBinary.php
+++ b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/HexBinary.php
@@ -5,7 +5,7 @@
*
* LICENSE
*
- * Copyright (c) 2009-2012 Nicholas J Humfrey. All rights reserved.
+ * 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:
@@ -31,9 +31,8 @@
* POSSIBILITY OF SUCH DAMAGE.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
- * @version $Id$
*/
/**
@@ -41,7 +40,7 @@
*
* @package EasyRdf
* @link http://www.w3.org/TR/xmlschema-2/#hexBinary
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
*/
class EasyRdf_Literal_HexBinary extends EasyRdf_Literal
@@ -88,5 +87,3 @@ class EasyRdf_Literal_HexBinary extends EasyRdf_Literal
return pack("H*", $this->value);
}
}
-
-EasyRdf_Literal::setDatatypeMapping('xsd:hexBinary', 'EasyRdf_Literal_HexBinary');
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/Integer.php b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/Integer.php
index b12682e..47de413 100644
--- a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/Integer.php
+++ b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/Integer.php
@@ -5,7 +5,7 @@
*
* LICENSE
*
- * Copyright (c) 2009-2012 Nicholas J Humfrey. All rights reserved.
+ * 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:
@@ -31,9 +31,8 @@
* POSSIBILITY OF SUCH DAMAGE.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
- * @version $Id$
*/
/**
@@ -41,7 +40,7 @@
*
* @package EasyRdf
* @link http://www.w3.org/TR/xmlschema-2/#integer
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
*/
class EasyRdf_Literal_Integer extends EasyRdf_Literal
@@ -67,5 +66,3 @@ class EasyRdf_Literal_Integer extends EasyRdf_Literal
return (int)$this->value;
}
}
-
-EasyRdf_Literal::setDatatypeMapping('xsd:integer', 'EasyRdf_Literal_Integer');
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/XML.php b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/XML.php
index 0a90c32..3f8dd79 100644
--- a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/XML.php
+++ b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/XML.php
@@ -33,7 +33,6 @@
* @package EasyRdf
* @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
- * @version $Id$
*/
/**
@@ -70,5 +69,3 @@ class EasyRdf_Literal_XML extends EasyRdf_Literal
return $dom;
}
}
-
-EasyRdf_Literal::setDatatypeMapping('rdf:XMLLiteral', 'EasyRdf_Literal_XML');
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Namespace.php b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Namespace.php
index 61437b5..353d3ba 100644
--- a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Namespace.php
+++ b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Namespace.php
@@ -5,7 +5,7 @@
*
* LICENSE
*
- * Copyright (c) 2009-2012 Nicholas J Humfrey. All rights reserved.
+ * 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:
@@ -31,16 +31,15 @@
* POSSIBILITY OF SUCH DAMAGE.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
- * @version $Id$
*/
/**
* A namespace registry and manipulation class.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
*/
class EasyRdf_Namespace
@@ -192,7 +191,7 @@ class EasyRdf_Namespace
*/
public static function setDefault($namespace)
{
- if (empty($namespace)) {
+ if (is_null($namespace) or $namespace === '') {
self::$default = null;
} elseif (preg_match("/^\w+$/", $namespace)) {
if (isset(self::$namespaces[$namespace])) {
@@ -329,13 +328,15 @@ class EasyRdf_Namespace
*/
public static function expand($shortUri)
{
- if (!is_string($shortUri) or empty($shortUri)) {
+ if (!is_string($shortUri) or $shortUri === '') {
throw new InvalidArgumentException(
"\$shortUri should be a string and cannot be null or empty"
);
}
-
- if (preg_match("/^(\w+?):([\w\-]+)$/", $shortUri, $matches)) {
+
+ if ($shortUri === 'a') {
+ return self::$namespaces['rdf'] . 'type';
+ } elseif (preg_match("/^(\w+?):([\w\-]+)$/", $shortUri, $matches)) {
$long = self::get($matches[1]);
if ($long) {
return $long . $matches[2];
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/ParsedUri.php b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/ParsedUri.php
index 0e9f245..0b8dd47 100644
--- a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/ParsedUri.php
+++ b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/ParsedUri.php
@@ -5,7 +5,7 @@
*
* LICENSE
*
- * Copyright (c) 2009-2012 Nicholas J Humfrey. All rights reserved.
+ * 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:
@@ -31,9 +31,8 @@
* POSSIBILITY OF SUCH DAMAGE.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
- * @version $Id$
*/
@@ -41,7 +40,7 @@
* A RFC3986 compliant URI parser
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @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
*/
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser.php b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser.php
index b077847..b15b449 100644
--- a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser.php
+++ b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser.php
@@ -5,7 +5,7 @@
*
* LICENSE
*
- * Copyright (c) 2009-2010 Nicholas J Humfrey. All rights reserved.
+ * 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:
@@ -31,16 +31,15 @@
* POSSIBILITY OF SUCH DAMAGE.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2010 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
- * @version $Id$
*/
/**
* Parent class for the EasyRdf parsers
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2010 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
*/
class EasyRdf_Parser
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Arc.php b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Arc.php
index e1a4b06..b4e5e1e 100644
--- a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Arc.php
+++ b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Arc.php
@@ -5,7 +5,7 @@
*
* LICENSE
*
- * Copyright (c) 2009-2012 Nicholas J Humfrey. All rights reserved.
+ * 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:
@@ -31,16 +31,15 @@
* POSSIBILITY OF SUCH DAMAGE.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
- * @version $Id$
*/
/**
* Class to parse RDF using the ARC2 library.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
*/
class EasyRdf_Parser_Arc extends EasyRdf_Parser_RdfPhp
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Exception.php b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Exception.php
new file mode 100644
index 0000000..d03b5bd
--- /dev/null
+++ b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Exception.php
@@ -0,0 +1,76 @@
+<?php
+
+/**
+ * EasyRdf
+ *
+ * LICENSE
+ *
+ * Copyright (c) 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
+ */
+
+/**
+ * EasyRdf Exception class
+ *
+ * All exceptions thrown by EasyRdf are an instance of this class.
+ *
+ * @package EasyRdf
+ * @copyright Copyright (c) 2013 Nicholas J Humfrey
+ * @license http://www.opensource.org/licenses/bsd-license.php
+ */
+class EasyRdf_Parser_Exception extends EasyRdf_Exception
+{
+ protected $parserLine;
+ protected $parserColumn;
+
+ public function __construct($message, $line = null, $column = null)
+ {
+ $this->parserLine = $line;
+ $this->parserColumn = $column;
+
+ if (!is_null($line)) {
+ $message .= " on line $line";
+ if (!is_null($column)) {
+ $message .= ", column $column";
+ }
+ }
+
+ parent::__construct($message);
+ }
+
+ public function getParserLine()
+ {
+ return $this->parserLine;
+ }
+
+ public function getParserColumn()
+ {
+ return $this->parserColumn;
+ }
+}
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Json.php b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Json.php
index a4a80c9..ee31d1d 100644
--- a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Json.php
+++ b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Json.php
@@ -5,7 +5,7 @@
*
* LICENSE
*
- * Copyright (c) 2009-2012 Nicholas J Humfrey. All rights reserved.
+ * 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:
@@ -31,9 +31,8 @@
* POSSIBILITY OF SUCH DAMAGE.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
- * @version $Id$
*/
/**
@@ -42,7 +41,7 @@
* http://n2.talis.com/wiki/RDF_JSON_Specification
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
*/
class EasyRdf_Parser_Json extends EasyRdf_Parser_RdfPhp
@@ -142,7 +141,7 @@ class EasyRdf_Parser_Json extends EasyRdf_Parser_RdfPhp
$decoded = @json_decode(strval($data), true);
if ($decoded === null) {
- throw new EasyRdf_Exception(
+ throw new EasyRdf_Parser_Exception(
$this->jsonLastErrorString()
);
}
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Ntriples.php b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Ntriples.php
index af3503e..1392b5b 100644
--- a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Ntriples.php
+++ b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Ntriples.php
@@ -5,7 +5,7 @@
*
* LICENSE
*
- * Copyright (c) 2009-2012 Nicholas J Humfrey. All rights reserved.
+ * 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:
@@ -31,16 +31,15 @@
* POSSIBILITY OF SUCH DAMAGE.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
- * @version $Id$
*/
/**
* A pure-php class to parse N-Triples with no dependancies.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
*/
class EasyRdf_Parser_Ntriples extends EasyRdf_Parser
@@ -78,21 +77,22 @@ class EasyRdf_Parser_Ntriples extends EasyRdf_Parser
while (preg_match('/\\\(U)([0-9A-F]{8})/', $str, $matches) ||
preg_match('/\\\(u)([0-9A-F]{4})/', $str, $matches)) {
$no = hexdec($matches[2]);
- if ($no < 128) {
+ if ($no < 128) { // 0x80
$char = chr($no);
- } elseif ($no < 2048) {
+ } elseif ($no < 2048) { // 0x800
$char = chr(($no >> 6) + 192) .
chr(($no & 63) + 128);
- } elseif ($no < 65536) {
+ } elseif ($no < 65536) { // 0x10000
$char = chr(($no >> 12) + 224) .
chr((($no >> 6) & 63) + 128) .
chr(($no & 63) + 128);
- } elseif ($no < 2097152) {
+ } elseif ($no < 2097152) { // 0x200000
$char = chr(($no >> 18) + 240) .
chr((($no >> 12) & 63) + 128) .
chr((($no >> 6) & 63) + 128) .
chr(($no & 63) + 128);
} else {
+ # FIXME: throw an exception instead?
$char = '';
}
$str = str_replace('\\' . $matches[1] . $matches[2], $char, $str);
@@ -103,7 +103,7 @@ class EasyRdf_Parser_Ntriples extends EasyRdf_Parser
/**
* @ignore
*/
- protected function parseNtriplesSubject($sub)
+ protected function parseNtriplesSubject($sub, $lineNum)
{
if (preg_match('/<([^<>]+)>/', $sub, $matches)) {
return $this->unescapeString($matches[1]);
@@ -115,8 +115,9 @@ class EasyRdf_Parser_Ntriples extends EasyRdf_Parser
return $this->remapBnode($nodeid);
}
} else {
- throw new EasyRdf_Exception(
- "Failed to parse subject: $sub"
+ throw new EasyRdf_Parser_Exception(
+ "Failed to parse subject: $sub",
+ $lineNum
);
}
}
@@ -124,7 +125,7 @@ class EasyRdf_Parser_Ntriples extends EasyRdf_Parser
/**
* @ignore
*/
- protected function parseNtriplesObject($obj)
+ protected function parseNtriplesObject($obj, $lineNum)
{
if (preg_match('/"(.+)"\^\^<([^<>]+)>/', $obj, $matches)) {
return array(
@@ -156,8 +157,9 @@ class EasyRdf_Parser_Ntriples extends EasyRdf_Parser
);
}
} else {
- throw new EasyRdf_Exception(
- "Failed to parse object: $obj"
+ throw new EasyRdf_Parser_Exception(
+ "Failed to parse object: $obj",
+ $lineNum
);
}
}
@@ -181,15 +183,25 @@ class EasyRdf_Parser_Ntriples extends EasyRdf_Parser
);
}
- $lines = preg_split("/[\r\n]+/", strval($data));
- foreach ($lines as $line) {
+ $lines = preg_split("/\x0D?\x0A/", strval($data));
+ foreach ($lines as $index => $line) {
+ $lineNum = $index + 1;
if (preg_match("/^\s*#/", $line)) {
+ # Comment
continue;
- } elseif (preg_match("/(.+)\s+<([^<>]+)>\s+(.+)\s*\./", $line, $matches)) {
+ } elseif (preg_match("/^\s*(.+?)\s+<([^<>]+?)>\s+(.+?)\s*\.\s*$/", $line, $matches)) {
$this->addTriple(
- $this->parseNtriplesSubject($matches[1]),
+ $this->parseNtriplesSubject($matches[1], $lineNum),
$this->unescapeString($matches[2]),
- $this->parseNtriplesObject($matches[3])
+ $this->parseNtriplesObject($matches[3], $lineNum)
+ );
+ } elseif (preg_match("/^\s*$/", $line)) {
+ # Blank line
+ continue;
+ } else {
+ throw new EasyRdf_Parser_Exception(
+ "Failed to parse statement",
+ $lineNum
);
}
}
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Rapper.php b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Rapper.php
index 31983b7..ed12198 100644
--- a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Rapper.php
+++ b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Rapper.php
@@ -5,7 +5,7 @@
*
* LICENSE
*
- * Copyright (c) 2009-2012 Nicholas J Humfrey. All rights reserved.
+ * 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:
@@ -31,16 +31,15 @@
* POSSIBILITY OF SUCH DAMAGE.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
- * @version $Id$
*/
/**
* Class to parse RDF using the 'rapper' command line tool.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
*/
class EasyRdf_Parser_Rapper extends EasyRdf_Parser_Json
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/RdfPhp.php b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/RdfPhp.php
index baf9277..cea3c8a 100644
--- a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/RdfPhp.php
+++ b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/RdfPhp.php
@@ -5,7 +5,7 @@
*
* LICENSE
*
- * Copyright (c) 2009-2010 Nicholas J Humfrey. All rights reserved.
+ * 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:
@@ -31,9 +31,8 @@
* POSSIBILITY OF SUCH DAMAGE.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2010 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
- * @version $Id$
*/
/**
@@ -42,7 +41,7 @@
* http://n2.talis.com/wiki/RDF_PHP_Specification
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2010 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
*/
class EasyRdf_Parser_RdfPhp extends EasyRdf_Parser
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/RdfXml.php b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/RdfXml.php
index 06e27cf..b7d59fe 100644
--- a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/RdfXml.php
+++ b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/RdfXml.php
@@ -5,7 +5,7 @@
*
* LICENSE
*
- * Copyright (c) 2010-2011 Nicholas J Humfrey
+ * Copyright (c) 2010-2013 Nicholas J Humfrey
* Copyright (c) 2004-2010 Benjamin Nowack (based on ARC2_RDFXMLParser.php)
*
* Redistribution and use in source and binary forms, with or without
@@ -32,9 +32,8 @@
* POSSIBILITY OF SUCH DAMAGE.
*
* @package EasyRdf
- * @copyright Copyright (c) 2010 Nicholas J Humfrey
+ * @copyright Copyright (c) 2010-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
- * @version $Id$
*/
@@ -42,7 +41,7 @@
* A pure-php class to parse RDF/XML.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2010 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* Copyright (c) 2004-2010 Benjamin Nowack (based on ARC2_RDFXMLParser.php)
* @license http://www.opensource.org/licenses/bsd-license.php
*/
@@ -217,7 +216,7 @@ class EasyRdf_Parser_RdfXml extends EasyRdf_Parser
case 6:
return $this->startState6($t, $a);
default:
- throw new EasyRdf_Exception(
+ throw new EasyRdf_Parser_Exception(
'startElementHandler() called at state ' . $this->state . ' in '.$t
);
}
@@ -240,7 +239,7 @@ class EasyRdf_Parser_RdfXml extends EasyRdf_Parser
case 6:
return $this->endState6($t);
default:
- throw new EasyRdf_Exception(
+ throw new EasyRdf_Parser_Exception(
'endElementHandler() called at state ' . $this->state . ' in '.$t
);
}
@@ -794,9 +793,11 @@ class EasyRdf_Parser_RdfXml extends EasyRdf_Parser
/* parse */
if (!xml_parse($this->xmlParser, $data, false)) {
- throw new EasyRdf_Exception(
- 'XML error: "' . xml_error_string(xml_get_error_code($this->xmlParser)) .
- '" at line ' . xml_get_current_line_number($this->xmlParser)
+ $message = xml_error_string(xml_get_error_code($this->xmlParser));
+ throw new EasyRdf_Parser_Exception(
+ 'XML error: "' . $message . '"',
+ xml_get_current_line_number($this->xmlParser),
+ xml_get_current_column_number($this->xmlParser)
);
}
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Rdfa.php b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Rdfa.php
index 9e7902b..5811fb2 100644
--- a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Rdfa.php
+++ b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Rdfa.php
@@ -5,7 +5,7 @@
*
* LICENSE
*
- * Copyright (c) 2012 Nicholas J Humfrey.
+ * Copyright (c) 2012-2013 Nicholas J Humfrey.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -32,10 +32,9 @@
* POSSIBILITY OF SUCH DAMAGE.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* Copyright (c) 1997-2006 Aduna (http://www.aduna-software.com/)
* @license http://www.opensource.org/licenses/bsd-license.php
- * @version $Id$
*/
/**
@@ -44,7 +43,7 @@
* http://www.w3.org/TR/rdfa-core/
*
* @package EasyRdf
- * @copyright Copyright (c) 2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2012-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
*/
class EasyRdf_Parser_Rdfa extends EasyRdf_Parser
@@ -373,6 +372,28 @@ class EasyRdf_Parser_Rdfa extends EasyRdf_Parser
$lang = $node->getAttribute('lang');
}
+ // HTML+RDFa 1.1: ignore rel and rev unless they contain CURIEs.
+ foreach (array('rel', 'rev') as $attr) {
+ if ($node->hasAttribute('property') and $node->hasAttribute($attr)) {
+ // Quick check in case there are no CURIEs to deal with.
+ if (strpos($node->getAttribute($attr), ':') === false) {
+ $node->removeAttribute($attr);
+ } else {
+ // Only keep CURIEs.
+ $curies = array();
+ foreach (preg_split("/\s+/", $node->getAttribute($attr)) as $token) {
+ if (strpos($token, ':')) {
+ $curies[] = $token;
+ }
+ }
+ $node->setAttribute($attr, implode(' ', $curies));
+ }
+ }
+ }
+
+ $rels = $this->processUriList($node, $context, $node->getAttribute('rel'));
+ $revs = $this->processUriList($node, $context, $node->getAttribute('rev'));
+
if (!$node->hasAttribute('rel') and !$node->hasAttribute('rev')) {
// Step 5: Establish a new subject if no rel/rev
if ($property and is_null($content) and is_null($datatype)) {
@@ -439,8 +460,6 @@ class EasyRdf_Parser_Rdfa extends EasyRdf_Parser
$subject = $context['object'];
}
- $rels = $this->processUriList($node, $context, $node->getAttribute('rel'));
- $revs = $this->processUriList($node, $context, $node->getAttribute('rev'));
}
# FIXME: better place for this?
@@ -519,8 +538,8 @@ class EasyRdf_Parser_Rdfa extends EasyRdf_Parser
$datatype = $this->processUri($node, $context, $datatype, true);
}
- if ($node->nodeName === 'data' and $node->hasAttribute('value')) {
- $value['value'] = $node->getAttribute('value');
+ if ($content !== null) {
+ $value['value'] = $content;
} elseif ($node->hasAttribute('datetime')) {
$value['value'] = $node->getAttribute('datetime');
$datetime = true;
@@ -531,9 +550,7 @@ class EasyRdf_Parser_Rdfa extends EasyRdf_Parser
foreach ($node->childNodes as $child) {
$value['value'] .= $child->C14N();
}
- } elseif ($content !== null) {
- $value['value'] = $content;
- } elseif (is_null($datatype) and empty($rel) and empty($rev)) {
+ } elseif (is_null($datatype) and empty($rels) and empty($revs)) {
$value['value'] = $this->getUriAttribute(
$node,
$context,
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Redland.php b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Redland.php
index c21c02d..bdeb5a2 100644
--- a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Redland.php
+++ b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Redland.php
@@ -5,7 +5,7 @@
*
* LICENSE
*
- * Copyright (c) 2009-2012 Nicholas J Humfrey. All rights reserved.
+ * 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:
@@ -31,16 +31,15 @@
* POSSIBILITY OF SUCH DAMAGE.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
- * @version $Id$
*/
/**
* Class to parse RDF using Redland (librdf) C library.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
*/
class EasyRdf_Parser_Redland extends EasyRdf_Parser
@@ -121,7 +120,7 @@ class EasyRdf_Parser_Redland extends EasyRdf_Parser
* Convert a node into an associate array
* @ignore
*/
- protected function nodeToArray($node)
+ protected function nodeToRdfPhp($node)
{
$object = array();
$object['type'] = EasyRdf_Parser_Redland::nodeTypeString($node);
@@ -211,8 +210,8 @@ class EasyRdf_Parser_Redland extends EasyRdf_Parser
$stream = librdf_parser_parse_string_as_stream($parser, $data, $rdfUri);
if (!$stream) {
- throw new EasyRdf_Exception(
- "Failed to parse RDF stream for: $rdfUri"
+ throw new EasyRdf_Parser_Exception(
+ "Failed to parse RDF stream"
);
}
@@ -225,7 +224,7 @@ class EasyRdf_Parser_Redland extends EasyRdf_Parser
$predicate = EasyRdf_Parser_Redland::nodeUriString(
librdf_statement_get_predicate($statement)
);
- $object = EasyRdf_Parser_Redland::nodeToArray(
+ $object = EasyRdf_Parser_Redland::nodeToRdfPhp(
librdf_statement_get_object($statement)
);
@@ -235,7 +234,7 @@ class EasyRdf_Parser_Redland extends EasyRdf_Parser
$errorCount = $this->parserErrorCount($parser);
if ($errorCount) {
- throw new EasyRdf_Exception("$errorCount errors while parsing.");
+ throw new EasyRdf_Parser_Exception("$errorCount errors while parsing.");
}
librdf_free_uri($rdfUri);
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Turtle.php b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Turtle.php
index bbbec47..3915e32 100644
--- a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Turtle.php
+++ b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Turtle.php
@@ -5,8 +5,8 @@
*
* LICENSE
*
- * Copyright (c) 2009-2012 Nicholas J Humfrey.
- * Copyright (c) 1997-2006 Aduna (http://www.aduna-software.com/)
+ * Copyright (c) 2009-2013 Nicholas J Humfrey.
+ * Copyright (c) 1997-2013 Aduna (http://www.aduna-software.com/)
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -33,24 +33,36 @@
* POSSIBILITY OF SUCH DAMAGE.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* Copyright (c) 1997-2006 Aduna (http://www.aduna-software.com/)
* @license http://www.opensource.org/licenses/bsd-license.php
- * @version $Id$
*/
/**
* Class to parse Turtle with no external dependancies.
*
- * http://www.w3.org/TR/turtle/
- *
+ * It is a translation from Java to PHP of the Sesame Turtle Parser:
+ * http://bit.ly/TurtleParser
+ *
+ * Lasted updated against version:
+ * ecda6a15a200a2fc6a062e2e43081257c3ccd4e6 (Mon Jul 29 12:05:58 2013)
+ *
* @package EasyRdf
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
- * Copyright (c) 1997-2006 Aduna (http://www.aduna-software.com/)
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
+ * Copyright (c) 1997-2013 Aduna (http://www.aduna-software.com/)
* @license http://www.opensource.org/licenses/bsd-license.php
*/
class EasyRdf_Parser_Turtle extends EasyRdf_Parser_Ntriples
{
+ protected $data;
+ protected $namespaces;
+ protected $subject;
+ protected $predicate;
+ protected $object;
+
+ protected $line;
+ protected $column;
+
/**
* Constructor
*
@@ -80,13 +92,13 @@ class EasyRdf_Parser_Turtle extends EasyRdf_Parser_Ntriples
}
$this->data = $data;
- $this->len = strlen($data);
- $this->pos = 0;
-
$this->namespaces = array();
$this->subject = null;
$this->predicate = null;
$this->object = null;
+
+ $this->line = 1;
+ $this->column = 1;
$this->resetBnodeMap();
@@ -106,15 +118,29 @@ class EasyRdf_Parser_Turtle extends EasyRdf_Parser_Ntriples
*/
protected function parseStatement()
{
- $c = $this->peek();
- if ($c == '@') {
- $this->parseDirective();
+ $directive = '';
+ while (true) {
+ $c = $this->read();
+ if ($c == -1 || self::isWhitespace($c)) {
+ $this->unread($c);
+ break;
+ } else {
+ $directive .= $c;
+ }
+ }
+
+ if (preg_match("/^(@|prefix$|base$)/i", $directive)) {
+ $this->parseDirective($directive);
$this->skipWSC();
- $this->verifyCharacter($this->read(), ".");
+ // SPARQL BASE and PREFIX lines do not end in .
+ if ($directive[0] == "@") {
+ $this->verifyCharacterOrFail($this->read(), ".");
+ }
} else {
+ $this->unread($directive);
$this->parseTriples();
$this->skipWSC();
- $this->verifyCharacter($this->read(), ".");
+ $this->verifyCharacterOrFail($this->read(), ".");
}
}
@@ -122,30 +148,24 @@ class EasyRdf_Parser_Turtle extends EasyRdf_Parser_Ntriples
* Parse a directive [3]
* @ignore
*/
- protected function parseDirective()
+ protected function parseDirective($directive)
{
- // Verify that the first characters form the string "prefix"
- $this->verifyCharacter($this->read(), "@");
-
- $directive = '';
-
- $c = $this->read();
- while ($c != -1 && !self::isWhitespace($c)) {
- $directive .= $c;
- $c = $this->read();
- }
-
- if ($directive == "prefix") {
+ $directive = strtolower($directive);
+ if ($directive == "prefix" || $directive == '@prefix') {
$this->parsePrefixID();
- } elseif ($directive == "base") {
+ } elseif ($directive == "base" || $directive == '@base') {
$this->parseBase();
- } elseif (strlen($directive) == 0) {
- throw new EasyRdf_Exception(
- "Turtle Parse Error: directive name is missing, expected @prefix or @base"
+ } elseif (mb_strlen($directive) == 0) {
+ throw new EasyRdf_Parser_Exception(
+ "Turtle Parse Error: directive name is missing, expected @prefix or @base",
+ $this->line,
+ $this->column
);
} else {
- throw new EasyRdf_Exception(
- "Turtle Parse Error: unknown directive \"@$directive\""
+ throw new EasyRdf_Parser_Exception(
+ "Turtle Parse Error: unknown directive \"$directive\"",
+ $this->line,
+ $this->column
);
}
}
@@ -169,8 +189,10 @@ class EasyRdf_Parser_Turtle extends EasyRdf_Parser_Ntriples
} elseif (self::isWhitespace($c)) {
break;
} elseif ($c == -1) {
- throw new EasyRdf_Exception(
- "Turtle Parse Error: unexpected end of file while reading prefix id"
+ throw new EasyRdf_Parser_Exception(
+ "Turtle Parse Error: unexpected end of file while reading prefix id",
+ $this->line,
+ $this->column
);
}
@@ -178,7 +200,7 @@ class EasyRdf_Parser_Turtle extends EasyRdf_Parser_Ntriples
}
$this->skipWSC();
- $this->verifyCharacter($this->read(), ":");
+ $this->verifyCharacterOrFail($this->read(), ":");
$this->skipWSC();
// Read the namespace URI
@@ -206,9 +228,37 @@ class EasyRdf_Parser_Turtle extends EasyRdf_Parser_Ntriples
*/
protected function parseTriples()
{
- $this->parseSubject();
- $this->skipWSC();
- $this->parsePredicateObjectList();
+ $c = $this->peek();
+
+ // If the first character is an open bracket we need to decide which of
+ // the two parsing methods for blank nodes to use
+ if ($c == '[') {
+ $c = $this->read();
+ $this->skipWSC();
+ $c = $this->peek();
+ if ($c == ']') {
+ $c = $this->read();
+ $this->subject = $this->createBNode();
+ $this->skipWSC();
+ $this->parsePredicateObjectList();
+ } else {
+ $this->unread('[');
+ $this->subject = $this->parseImplicitBlank();
+ }
+ $this->skipWSC();
+ $c = $this->peek();
+
+ // if this is not the end of the statement, recurse into the list of
+ // predicate and objects, using the subject parsed above as the subject
+ // of the statement.
+ if ($c != '.') {
+ $this->parsePredicateObjectList();
+ }
+ } else {
+ $this->parseSubject();
+ $this->skipWSC();
+ $this->parsePredicateObjectList();
+ }
$this->subject = null;
$this->predicate = null;
@@ -233,6 +283,9 @@ class EasyRdf_Parser_Turtle extends EasyRdf_Parser_Ntriples
if ($c == '.' || $c == ']') {
break;
+ } elseif ($c == ';') {
+ // empty predicateObjectList, skip to next
+ continue;
}
$this->predicate = $this->parsePredicate();
@@ -275,8 +328,10 @@ class EasyRdf_Parser_Turtle extends EasyRdf_Parser_Ntriples
if ($value['type'] == 'uri' or $value['type'] == 'bnode') {
$this->subject = $value;
} else {
- throw new EasyRdf_Exception(
- "Turtle Parse Error: illegal subject type: ".$value['type']
+ throw new EasyRdf_Parser_Exception(
+ "Turtle Parse Error: illegal subject type: ".$value['type'],
+ $this->line,
+ $this->column
);
}
}
@@ -312,8 +367,10 @@ class EasyRdf_Parser_Turtle extends EasyRdf_Parser_Ntriples
if ($predicate['type'] == 'uri') {
return $predicate;
} else {
- throw new EasyRdf_Exception(
- "Turtle Parse Error: Illegal predicate value: " . $predicate
+ throw new EasyRdf_Parser_Exception(
+ "Turtle Parse Error: Illegal predicate type: " . $predicate['type'],
+ $this->line,
+ $this->column
);
}
}
@@ -351,12 +408,9 @@ class EasyRdf_Parser_Turtle extends EasyRdf_Parser_Ntriples
*/
protected function parseImplicitBlank()
{
- $this->verifyCharacter($this->read(), "[");
+ $this->verifyCharacterOrFail($this->read(), "[");
- $bnode = array(
- 'type' => 'bnode',
- 'value' => $this->graph->newBNodeId()
- );
+ $bnode = $this->createBNode();
$c = $this->read();
if ($c != ']') {
@@ -377,7 +431,7 @@ class EasyRdf_Parser_Turtle extends EasyRdf_Parser_Ntriples
$this->skipWSC();
// Read closing bracket
- $this->verifyCharacter($this->read(), "]");
+ $this->verifyCharacterOrFail($this->read(), "]");
// Restore previous subject and predicate
$this->subject = $oldSubject;
@@ -393,7 +447,7 @@ class EasyRdf_Parser_Turtle extends EasyRdf_Parser_Ntriples
*/
protected function parseCollection()
{
- $this->verifyCharacter($this->read(), "(");
+ $this->verifyCharacterOrFail($this->read(), "(");
$c = $this->skipWSC();
if ($c == ')') {
@@ -404,10 +458,7 @@ class EasyRdf_Parser_Turtle extends EasyRdf_Parser_Ntriples
'value' => EasyRdf_Namespace::get('rdf') . 'nil'
);
} else {
- $listRoot = array(
- 'type' => 'bnode',
- 'value' => $this->graph->newBNodeId()
- );
+ $listRoot = $this->createBNode();
// Remember current subject and predicate
$oldSubject = $this->subject;
@@ -425,10 +476,7 @@ class EasyRdf_Parser_Turtle extends EasyRdf_Parser_Ntriples
while ($this->skipWSC() != ')') {
// Create another list node and link it to the previous
- $newNode = array(
- 'type' => 'bnode',
- 'value' => $this->graph->newBNodeId()
- );
+ $newNode = $this->createBNode();
$this->addTriple(
$bNode['value'],
@@ -481,31 +529,34 @@ class EasyRdf_Parser_Turtle extends EasyRdf_Parser_Ntriples
} elseif ($c == '_') {
// node ID, e.g. _:n1
return $this->parseNodeID();
- } elseif ($c == '"' or $c == "'") {
+ } elseif ($c == '"' || $c == "'") {
// quoted literal, e.g. "foo" or """foo""" or 'foo' or '''foo'''
- return $this->parseQuotedLiteral($c);
+ return $this->parseQuotedLiteral();
} elseif (ctype_digit($c) || $c == '.' || $c == '+' || $c == '-') {
// integer or double, e.g. 123 or 1.2e3
return $this->parseNumber();
} elseif ($c == -1) {
- throw new EasyRdf_Exception(
- "Turtle Parse Error: unexpected end of file while reading value"
+ throw new EasyRdf_Parser_Exception(
+ "Turtle Parse Error: unexpected end of file while reading value",
+ $this->line,
+ $this->column
);
} else {
- throw new EasyRdf_Exception(
- "Turtle Parse Error: expected an RDF value here, found '$c'"
+ throw new EasyRdf_Parser_Exception(
+ "Turtle Parse Error: expected an RDF value here, found '$c'",
+ $this->line,
+ $this->column
);
}
}
/**
* Parses a quoted string, optionally followed by a language tag or datatype.
- * @param string $quote The type of quote to use (either ' or ")
* @ignore
*/
- protected function parseQuotedLiteral($quote)
+ protected function parseQuotedLiteral()
{
- $label = $this->parseQuotedString($quote);
+ $label = $this->parseQuotedString();
// Check for presence of a language tag or datatype
$c = $this->peek();
@@ -517,20 +568,35 @@ class EasyRdf_Parser_Turtle extends EasyRdf_Parser_Ntriples
$lang = '';
$c = $this->read();
if ($c == -1) {
- throw new EasyRdf_Exception(
- "Turtle Parse Error: unexpected end of file while reading language"
+ throw new EasyRdf_Parser_Exception(
+ "Turtle Parse Error: unexpected end of file while reading language",
+ $this->line,
+ $this->column
);
} elseif (!self::isLanguageStartChar($c)) {
- throw new EasyRdf_Exception(
- "Turtle Parse Error: expected a letter, found '$c'"
+ throw new EasyRdf_Parser_Exception(
+ "Turtle Parse Error: expected a letter, found '$c'",
+ $this->line,
+ $this->column
);
}
$lang .= $c;
$c = $this->read();
- while (self::isLanguageChar($c)) {
- $lang .= $c;
+ while (!self::isWhitespace($c)) {
+ if ($c == '.' || $c == ';' || $c == ',' || $c == ')' || $c == ']' || $c == -1) {
+ break;
+ }
+ if (self::isLanguageChar($c)) {
+ $lang .= $c;
+ } else {
+ throw new EasyRdf_Parser_Exception(
+ "Turtle Parse Error: illegal language tag char: '$c'",
+ $this->line,
+ $this->column
+ );
+ }
$c = $this->read();
}
@@ -545,7 +611,7 @@ class EasyRdf_Parser_Turtle extends EasyRdf_Parser_Ntriples
$this->read();
// next character should be another '^'
- $this->verifyCharacter($this->read(), "^");
+ $this->verifyCharacterOrFail($this->read(), "^");
// Read datatype
$datatype = $this->parseValue();
@@ -556,8 +622,10 @@ class EasyRdf_Parser_Turtle extends EasyRdf_Parser_Ntriples
'datatype' => $datatype['value']
);
} else {
- throw new EasyRdf_Exception(
- "Turtle Parse Error: illegal datatype value: $datatype"
+ throw new EasyRdf_Parser_Exception(
+ "Turtle Parse Error: illegal datatype type: " . $datatype['type'],
+ $this->line,
+ $this->column
);
}
} else {
@@ -570,29 +638,30 @@ class EasyRdf_Parser_Turtle extends EasyRdf_Parser_Ntriples
/**
* Parses a quoted string, which is either a "normal string" or a """long string""".
- * @param string $quote The type of quote to use (either ' or ")
* @ignore
*/
- protected function parseQuotedString($quote)
+ protected function parseQuotedString()
{
$result = null;
+ $c1 = $this->read();
+
// First character should be ' or "
- $this->verifyCharacter($this->read(), $quote);
+ $this->verifyCharacterOrFail($c1, "\"\'");
// Check for long-string, which starts and ends with three double quotes
$c2 = $this->read();
$c3 = $this->read();
- if ($c2 == $quote && $c3 == $quote) {
+ if ($c2 == $c1 && $c3 == $c1) {
// Long string
- $result = $this->parseLongString($quote);
+ $result = $this->parseLongString($c2);
} else {
// Normal string
$this->unread($c3);
$this->unread($c2);
- $result = $this->parseString($quote);
+ $result = $this->parseString($c1);
}
// Unescape any escape sequences
@@ -600,23 +669,25 @@ class EasyRdf_Parser_Turtle extends EasyRdf_Parser_Ntriples
}
/**
- * Parses a "normal string". This method assumes that the first double quote
+ * Parses a "normal string". This method requires that the opening character
* has already been parsed.
- * @param string $quote The type of quote to use (either ' or ")
+ * @param string $closingCharacter The type of quote to use (either ' or ")
* @ignore
*/
- protected function parseString($quote)
+ protected function parseString($closingCharacter)
{
$str = '';
while (true) {
$c = $this->read();
- if ($c == $quote) {
+ if ($c == $closingCharacter) {
break;
} elseif ($c == -1) {
- throw new EasyRdf_Exception(
- "Turtle Parse Error: unexpected end of file while reading string"
+ throw new EasyRdf_Parser_Exception(
+ "Turtle Parse Error: unexpected end of file while reading string",
+ $this->line,
+ $this->column
);
}
@@ -626,8 +697,10 @@ class EasyRdf_Parser_Turtle extends EasyRdf_Parser_Ntriples
// This escapes the next character, which might be a ' or a "
$c = $this->read();
if ($c == -1) {
- throw new EasyRdf_Exception(
- "Turtle Parse Error: unexpected end of file while reading string"
+ throw new EasyRdf_Parser_Exception(
+ "Turtle Parse Error: unexpected end of file while reading string",
+ $this->line,
+ $this->column
);
}
$str .= $c;
@@ -638,12 +711,12 @@ class EasyRdf_Parser_Turtle extends EasyRdf_Parser_Ntriples
}
/**
- * Parses a """long string""". This method assumes that the first three
- * double quotes have already been parsed.
- * @param string $quote The type of quote to use (either ' or ")
+ * Parses a """long string""". This method requires that the first three
+ * characters have already been parsed.
+ * @param string $closingCharacter The type of quote to use (either ' or ")
* @ignore
*/
- protected function parseLongString($quote)
+ protected function parseLongString($closingCharacter)
{
$str = '';
$doubleQuoteCount = 0;
@@ -652,10 +725,12 @@ class EasyRdf_Parser_Turtle extends EasyRdf_Parser_Ntriples
$c = $this->read();
if ($c == -1) {
- throw new EasyRdf_Exception(
- "Turtle Parse Error: unexpected end of file while reading long string"
+ throw new EasyRdf_Parser_Exception(
+ "Turtle Parse Error: unexpected end of file while reading long string",
+ $this->line,
+ $this->column
);
- } elseif ($c == $quote) {
+ } elseif ($c == $closingCharacter) {
$doubleQuoteCount++;
} else {
$doubleQuoteCount = 0;
@@ -667,15 +742,17 @@ class EasyRdf_Parser_Turtle extends EasyRdf_Parser_Ntriples
// This escapes the next character, which might be a ' or "
$c = $this->read();
if ($c == -1) {
- throw new EasyRdf_Exception(
- "Turtle Parse Error: unexpected end of file while reading long string"
+ throw new EasyRdf_Parser_Exception(
+ "Turtle Parse Error: unexpected end of file while reading long string",
+ $this->line,
+ $this->column
);
}
$str .= $c;
}
}
- return substr($str, 0, -3);
+ return mb_substr($str, 0, -3);
}
/**
@@ -701,29 +778,39 @@ class EasyRdf_Parser_Turtle extends EasyRdf_Parser_Ntriples
}
if ($c == '.' || $c == 'e' || $c == 'E') {
- // We're parsing a decimal or a double
- $datatype = EasyRdf_Namespace::get('xsd').'decimal';
-
// read optional fractional digits
if ($c == '.') {
- $value .= $c;
- $c = $this->read();
- while (ctype_digit($c)) {
+
+ if (self::isWhitespace($this->peek())) {
+ // We're parsing an integer that did not have a space before the
+ // period to end the statement
+ } else {
$value .= $c;
$c = $this->read();
- }
-
- if (strlen($value) == 1) {
- // We've only parsed a '.'
- throw new EasyRdf_Exception(
- "Turtle Parse Error: object for statement missing"
- );
+ while (ctype_digit($c)) {
+ $value .= $c;
+ $c = $this->read();
+ }
+
+ if (mb_strlen($value) == 1) {
+ // We've only parsed a '.'
+ throw new EasyRdf_Parser_Exception(
+ "Turtle Parse Error: object for statement missing",
+ $this->line,
+ $this->column
+ );
+ }
+
+ // We're parsing a decimal or a double
+ $datatype = EasyRdf_Namespace::get('xsd').'decimal';
}
} else {
- if (strlen($value) == 0) {
+ if (mb_strlen($value) == 0) {
// We've only parsed an 'e' or 'E'
- throw new EasyRdf_Exception(
- "Turtle Parse Error: object for statement missing"
+ throw new EasyRdf_Parser_Exception(
+ "Turtle Parse Error: object for statement missing",
+ $this->line,
+ $this->column
);
}
}
@@ -740,8 +827,10 @@ class EasyRdf_Parser_Turtle extends EasyRdf_Parser_Ntriples
}
if (!ctype_digit($c)) {
- throw new EasyRdf_Exception(
- "Turtle Parse Error: Exponent value missing"
+ throw new EasyRdf_Parser_Exception(
+ "Turtle Parse Error: exponent value missing",
+ $this->line,
+ $this->column
);
}
@@ -775,7 +864,7 @@ class EasyRdf_Parser_Turtle extends EasyRdf_Parser_Ntriples
$uri = '';
// First character should be '<'
- $this->verifyCharacter($this->read(), "<");
+ $this->verifyCharacterOrFail($this->read(), "<");
// Read up to the next '>' character
while (true) {
@@ -784,8 +873,10 @@ class EasyRdf_Parser_Turtle extends EasyRdf_Parser_Ntriples
if ($c == '>') {
break;
} elseif ($c == -1) {
- throw new EasyRdf_Exception(
- "Turtle Parse Error: unexpected end of file while reading URI"
+ throw new EasyRdf_Parser_Exception(
+ "Turtle Parse Error: unexpected end of file while reading URI",
+ $this->line,
+ $this->column
);
}
@@ -795,8 +886,10 @@ class EasyRdf_Parser_Turtle extends EasyRdf_Parser_Ntriples
// This escapes the next character, which might be a '>'
$c = $this->read();
if ($c == -1) {
- throw new EasyRdf_Exception(
- "Turtle Parse Error: unexpected end of file while reading URI"
+ throw new EasyRdf_Parser_Exception(
+ "Turtle Parse Error: unexpected end of file while reading URI",
+ $this->line,
+ $this->column
);
}
$uri .= $c;
@@ -822,13 +915,17 @@ class EasyRdf_Parser_Turtle extends EasyRdf_Parser_Ntriples
// First character should be a ':' or a letter
$c = $this->read();
if ($c == -1) {
- throw new EasyRdf_Exception(
- "Turtle Parse Error: unexpected end of file while readying value"
+ throw new EasyRdf_Parser_Exception(
+ "Turtle Parse Error: unexpected end of file while readying value",
+ $this->line,
+ $this->column
);
}
if ($c != ':' && !self::isPrefixStartChar($c)) {
- throw new EasyRdf_Exception(
- "Turtle Parse Error: expected a ':' or a letter, found '$c'"
+ throw new EasyRdf_Parser_Exception(
+ "Turtle Parse Error: expected a ':' or a letter, found '$c'",
+ $this->line,
+ $this->column
);
}
@@ -836,10 +933,13 @@ class EasyRdf_Parser_Turtle extends EasyRdf_Parser_Ntriples
if ($c == ':') {
// qname using default namespace
- $namespace = $this->namespaces[""];
- if ($namespace == null) {
- throw new EasyRdf_Exception(
- "Turtle Parse Error: default namespace used but not defined"
+ if (isset($this->namespaces[''])) {
+ $namespace = $this->namespaces[''];
+ } else {
+ throw new EasyRdf_Parser_Exception(
+ "Turtle Parse Error: default namespace used but not defined",
+ $this->line,
+ $this->column
);
}
} else {
@@ -865,13 +965,15 @@ class EasyRdf_Parser_Turtle extends EasyRdf_Parser_Ntriples
}
}
- $this->verifyCharacter($c, ":");
+ $this->verifyCharacterOrFail($c, ":");
if (isset($this->namespaces[$prefix])) {
$namespace = $this->namespaces[$prefix];
} else {
- throw new EasyRdf_Exception(
- "Turtle Parse Error: namespace prefix '$prefix' used but not defined"
+ throw new EasyRdf_Parser_Exception(
+ "Turtle Parse Error: namespace prefix '$prefix' used but not defined",
+ $this->line,
+ $this->column
);
}
}
@@ -880,11 +982,19 @@ class EasyRdf_Parser_Turtle extends EasyRdf_Parser_Ntriples
$localName = '';
$c = $this->read();
if (self::isNameStartChar($c)) {
- $localName .= $c;
+ if ($c == '\\') {
+ $localName .= $this->readLocalEscapedChar();
+ } else {
+ $localName .= $c;
+ }
$c = $this->read();
while (self::isNameChar($c)) {
- $localName .= $c;
+ if ($c == '\\') {
+ $localName .= $this->readLocalEscapedChar();
+ } else {
+ $localName .= $c;
+ }
$c = $this->read();
}
}
@@ -899,6 +1009,21 @@ class EasyRdf_Parser_Turtle extends EasyRdf_Parser_Ntriples
);
}
+ protected function readLocalEscapedChar()
+ {
+ $c = $this->read();
+
+ if (self::isLocalEscapedChar($c)) {
+ return $c;
+ } else {
+ throw new EasyRdf_Parser_Exception(
+ "found '" . $c . "', expected one of: " . implode(', ', self::$localEscapedChars),
+ $this->line,
+ $this->column
+ );
+ }
+ }
+
/**
* Parses a blank node ID, e.g: _:node1
* @ignore
@@ -906,18 +1031,22 @@ class EasyRdf_Parser_Turtle extends EasyRdf_Parser_Ntriples
protected function parseNodeID()
{
// Node ID should start with "_:"
- $this->verifyCharacter($this->read(), "_");
- $this->verifyCharacter($this->read(), ":");
+ $this->verifyCharacterOrFail($this->read(), "_");
+ $this->verifyCharacterOrFail($this->read(), ":");
// Read the node ID
$c = $this->read();
if ($c == -1) {
- throw new EasyRdf_Exception(
- "Turtle Parse Error: unexpected end of file while reading node id"
+ throw new EasyRdf_Parser_Exception(
+ "Turtle Parse Error: unexpected end of file while reading node id",
+ $this->line,
+ $this->column
);
} elseif (!self::isNameStartChar($c)) {
- throw new EasyRdf_Exception(
- "Turtle Parse Error: expected a letter, found '$c'"
+ throw new EasyRdf_Parser_Exception(
+ "Turtle Parse Error: expected a letter, found '$c'",
+ $this->line,
+ $this->column
);
}
@@ -952,11 +1081,13 @@ class EasyRdf_Parser_Turtle extends EasyRdf_Parser_Ntriples
* exception if this is not the case.
* @ignore
*/
- protected function verifyCharacter($c, $expected)
+ protected function verifyCharacterOrFail($c, $expected)
{
if ($c == -1) {
- throw new EasyRdf_Exception(
- "Turtle Parse Error: unexpected end of file"
+ throw new EasyRdf_Parser_Exception(
+ "Turtle Parse Error: unexpected end of file",
+ $this->line,
+ $this->column
);
} elseif (strpbrk($c, $expected) === false) {
$msg = 'expected ';
@@ -968,7 +1099,11 @@ class EasyRdf_Parser_Turtle extends EasyRdf_Parser_Ntriples
}
$msg .= ", found '$c'";
- throw new EasyRdf_Exception("Turtle Parse Error: $msg");
+ throw new EasyRdf_Parser_Exception(
+ "Turtle Parse Error: $msg",
+ $this->line,
+ $this->column
+ );
}
}
@@ -981,7 +1116,7 @@ class EasyRdf_Parser_Turtle extends EasyRdf_Parser_Ntriples
$c = $this->read();
while (self::isWhitespace($c) || $c == '#') {
if ($c == '#') {
- $this->skipLine();
+ $this->processComment();
}
$c = $this->read();
@@ -995,10 +1130,12 @@ class EasyRdf_Parser_Turtle extends EasyRdf_Parser_Ntriples
* Consumes characters from reader until the first EOL has been read.
* @ignore
*/
- protected function skipLine()
+ protected function processComment()
{
+ $comment = '';
$c = $this->read();
while ($c != -1 && $c != "\r" && $c != "\n") {
+ $comment .= $c;
$c = $this->read();
}
@@ -1019,9 +1156,16 @@ class EasyRdf_Parser_Turtle extends EasyRdf_Parser_Ntriples
*/
protected function read()
{
- if ($this->pos < $this->len) {
- $c = $this->data[$this->pos];
- $this->pos++;
+ if (!empty($this->data)) {
+ $c = mb_substr($this->data, 0, 1);
+ // Keep tracks of which line we are on (0A = Line Feed)
+ if ($c == "\x0A") {
+ $this->line += 1;
+ $this->column = 1;
+ } else {
+ $this->column += 1;
+ }
+ $this->data = mb_substr($this->data, 1);
return $c;
} else {
return -1;
@@ -1035,8 +1179,8 @@ class EasyRdf_Parser_Turtle extends EasyRdf_Parser_Ntriples
*/
protected function peek()
{
- if ($this->pos < $this->len) {
- return $this->data[$this->pos];
+ if (!empty($this->data)) {
+ return mb_substr($this->data, 0, 1);
} else {
return -1;
}
@@ -1047,13 +1191,20 @@ class EasyRdf_Parser_Turtle extends EasyRdf_Parser_Ntriples
* Steps back, restoring the previous character read() to the input buffer
* @ignore
*/
- protected function unread()
+ protected function unread($c)
{
- if ($this->pos > 0) {
- $this->pos--;
- } else {
- throw new EasyRdf_Exception("Turtle Parse Error: unread error");
- }
+ # FIXME: deal with unreading new lines
+ $this->column -= mb_strlen($c);
+ $this->data = $c . $this->data;
+ }
+
+ /** @ignore */
+ protected function createBNode()
+ {
+ return array(
+ 'type' => 'bnode',
+ 'value' => $this->graph->newBNodeId()
+ );
}
/**
@@ -1063,7 +1214,7 @@ class EasyRdf_Parser_Turtle extends EasyRdf_Parser_Ntriples
public static function isWhitespace($c)
{
// Whitespace character are space, tab, newline and carriage return:
- return $c == " " || $c == "\t" || $c == "\r" || $c == "\n";
+ return $c == "\x20" || $c == "\x09" || $c == "\x0A" || $c == "\x0D";
}
/** @ignore */
@@ -1090,7 +1241,13 @@ class EasyRdf_Parser_Turtle extends EasyRdf_Parser_Ntriples
/** @ignore */
public static function isNameStartChar($c)
{
- return $c == '_' || self::isPrefixStartChar($c);
+ return
+ $c == '\\' ||
+ $c == '_' ||
+ $c == ':' ||
+ $c == '%' ||
+ ctype_digit($c) ||
+ self::isPrefixStartChar($c);
}
/** @ignore */
@@ -1099,17 +1256,37 @@ class EasyRdf_Parser_Turtle extends EasyRdf_Parser_Ntriples
$o = ord($c);
return
self::isNameStartChar($c) ||
+ $o >= 0x30 && $o <= 0x39 || # 0-9
$c == '-' ||
- $o >= 0x30 && $o <= 0x39 || # numeric
$o == 0x00B7 ||
$o >= 0x0300 && $o <= 0x036F ||
$o >= 0x203F && $o <= 0x2040;
}
/** @ignore */
+ private static $localEscapedChars = array(
+ '_', '~', '.', '-', '!', '$', '&', '\'', '(', ')',
+ '*', '+', ',', ';', '=', '/', '?', '#', '@', '%'
+ );
+
+ /** @ignore */
+ public static function isLocalEscapedChar($c)
+ {
+ return in_array($c, self::$localEscapedChars);
+ }
+
+ /** @ignore */
public static function isPrefixChar($c)
{
- return self::isNameChar($c);
+ $o = ord($c);
+ return
+ $c == '_' ||
+ $o >= 0x30 && $o <= 0x39 || # 0-9
+ self::isPrefixStartChar($c) ||
+ $c == '-' ||
+ $o == 0x00B7 ||
+ $c >= 0x0300 && $c <= 0x036F ||
+ $c >= 0x203F && $c <= 0x2040;
}
/** @ignore */
@@ -1117,8 +1294,8 @@ class EasyRdf_Parser_Turtle extends EasyRdf_Parser_Ntriples
{
$o = ord($c);
return
- $o >= 0x41 && $o <= 0x5a ||
- $o >= 0x61 && $o <= 0x7a;
+ $o >= 0x41 && $o <= 0x5a || # A-Z
+ $o >= 0x61 && $o <= 0x7a; # a-z
}
/** @ignore */
@@ -1126,9 +1303,9 @@ class EasyRdf_Parser_Turtle extends EasyRdf_Parser_Ntriples
{
$o = ord($c);
return
- $o >= 0x41 && $o <= 0x5a || # A-Z
- $o >= 0x61 && $o <= 0x7a || # a-z
- $o >= 0x30 && $o <= 0x39 || # 0-9
+ $o >= 0x41 && $o <= 0x5a || # A-Z
+ $o >= 0x61 && $o <= 0x7a || # a-z
+ $o >= 0x30 && $o <= 0x39 || # 0-9
$c == '-';
}
}
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Resource.php b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Resource.php
index ee99fbc..e5d1e91 100644
--- a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Resource.php
+++ b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Resource.php
@@ -5,7 +5,7 @@
*
* LICENSE
*
- * Copyright (c) 2009-2012 Nicholas J Humfrey. All rights reserved.
+ * 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:
@@ -31,25 +31,24 @@
* POSSIBILITY OF SUCH DAMAGE.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
- * @version $Id$
*/
/**
* Class that represents an RDF resource
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
*/
class EasyRdf_Resource
{
/** The URI for this resource */
- private $uri = null;
+ protected $uri = null;
/** The Graph that this resource belongs to */
- private $graph = null;
+ protected $graph = null;
/** Constructor
@@ -80,6 +79,16 @@ class EasyRdf_Resource
}
}
+ /**
+ * Return the graph that this resource belongs to
+ *
+ * @return EasyRdf_Graph
+ */
+ public function getGraph()
+ {
+ return $this->graph;
+ }
+
/** Returns the URI for the resource.
*
* @return string URI of this resource.
@@ -93,7 +102,7 @@ class EasyRdf_Resource
*
* @return bool True if this resource is a blank node.
*/
- public function isBnode()
+ public function isBNode()
{
if (substr($this->uri, 0, 2) == '_:') {
return true;
@@ -108,7 +117,7 @@ class EasyRdf_Resource
*
* @return string The identifer for the bnode
*/
- public function getNodeId()
+ public function getBNodeId()
{
if (substr($this->uri, 0, 2) == '_:') {
return substr($this->uri, 2);
@@ -181,6 +190,12 @@ class EasyRdf_Resource
$html = "<a";
foreach ($options as $key => $value) {
+ if (!preg_match('/^[-\w]+$/', $key)) {
+ throw new InvalidArgumentException(
+ "\$options should use valid attribute names as keys"
+ );
+ }
+
$html .= " ".htmlspecialchars($key)."=\"".
htmlspecialchars($value)."\"";
}
@@ -189,16 +204,16 @@ class EasyRdf_Resource
return $html;
}
- /** Returns the properties of the resource as an associative array
+ /** Returns the properties of the resource as an RDF/PHP associative array
*
* For example:
* array('type' => 'uri', 'value' => 'http://www.example.com/')
*
* @return array The properties of the resource
*/
- public function toArray()
+ public function toRdfPhp()
{
- if ($this->isBnode()) {
+ if ($this->isBNode()) {
return array('type' => 'bnode', 'value' => $this->uri);
} else {
return array('type' => 'uri', 'value' => $this->uri);
@@ -207,13 +222,13 @@ class EasyRdf_Resource
/** Return pretty-print view of the resource
*
- * @param bool $html Set to true to format the dump using HTML
+ * @param string $format Either 'html' or 'text'
* @param string $color The colour of the text
* @return string
*/
- public function dumpValue($html = true, $color = 'blue')
+ public function dumpValue($format = 'html', $color = 'blue')
{
- return EasyRdf_Utils::dumpResourceValue($this, $html, $color);
+ return EasyRdf_Utils::dumpResourceValue($this, $format, $color);
}
/** Magic method to return URI of resource when casted to string
@@ -438,10 +453,10 @@ class EasyRdf_Resource
* @param string $lang The language to filter by (e.g. en)
* @return integer The number of values associated with the property
*/
- public function count($property, $type = null, $lang = null)
+ public function countValues($property, $type = null, $lang = null)
{
$this->checkHasGraph();
- return $this->graph->count($this->uri, $property, $type, $lang);
+ return $this->graph->countValues($this->uri, $property, $type, $lang);
}
/** Concatenate all values for a property into a string.
@@ -619,13 +634,13 @@ class EasyRdf_Resource
* This method is intended to be a debugging aid and will
* print a resource and its properties.
*
- * @param bool $html Set to true to format the dump using HTML
+ * @param string $format Either 'html' or 'text'
* @return string
*/
- public function dump($html = true)
+ public function dump($format = 'html')
{
$this->checkHasGraph();
- return $this->graph->dumpResource($this->uri, $html);
+ return $this->graph->dumpResource($this->uri, $format);
}
/** Magic method to get a property of a resource
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser.php b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser.php
index 19467fa..1c0acb8 100644
--- a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser.php
+++ b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser.php
@@ -5,7 +5,7 @@
*
* LICENSE
*
- * Copyright (c) 2009-2010 Nicholas J Humfrey. All rights reserved.
+ * 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:
@@ -31,22 +31,25 @@
* POSSIBILITY OF SUCH DAMAGE.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2010 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
- * @version $Id$
*/
/**
* Parent class for the EasyRdf serialiser
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2010 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
*/
class EasyRdf_Serialiser
{
protected $prefixes = array();
+ public function __construct()
+ {
+ }
+
/**
* Keep track of the prefixes used while serialising
* @ignore
@@ -63,19 +66,17 @@ class EasyRdf_Serialiser
*/
protected function checkSerialiseParams(&$graph, &$format)
{
- if ($graph == null or !is_object($graph) or
- get_class($graph) != 'EasyRdf_Graph') {
+ if (is_null($graph) or !is_object($graph) or !($graph instanceof EasyRdf_Graph)) {
throw new InvalidArgumentException(
"\$graph should be an EasyRdf_Graph object and cannot be null"
);
}
- if ($format == null or $format == '') {
+ if (is_null($format) or $format == '') {
throw new InvalidArgumentException(
"\$format cannot be null or empty"
);
- } elseif (is_object($format) and
- get_class($format) == 'EasyRdf_Format') {
+ } elseif (is_object($format) and ($format instanceof EasyRdf_Format)) {
$format = $format->getName();
} elseif (!is_string($format)) {
throw new InvalidArgumentException(
@@ -96,7 +97,7 @@ class EasyRdf_Serialiser
$count = count($properties);
if ($count == 1) {
$property = $properties[0];
- return $resource->count("^<$property>");
+ return $resource->countValues("^<$property>");
} else {
return $count;
}
@@ -106,7 +107,7 @@ class EasyRdf_Serialiser
* Sub-classes must follow this protocol
* @ignore
*/
- public function serialise($graph, $format)
+ public function serialise($graph, $format, array $options = array())
{
throw new EasyRdf_Exception(
"This method should be overridden by sub-classes."
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/Arc.php b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/Arc.php
index fc79eca..31bd8b7 100644
--- a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/Arc.php
+++ b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/Arc.php
@@ -5,7 +5,7 @@
*
* LICENSE
*
- * Copyright (c) 2009-2010 Nicholas J Humfrey. All rights reserved.
+ * 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:
@@ -31,16 +31,15 @@
* POSSIBILITY OF SUCH DAMAGE.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2010 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
- * @version $Id$
*/
/**
* Class to serialise RDF using the ARC2 library.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2010 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
*/
class EasyRdf_Serialiser_Arc extends EasyRdf_Serialiser_RdfPhp
@@ -65,11 +64,13 @@ class EasyRdf_Serialiser_Arc extends EasyRdf_Serialiser_RdfPhp
/**
* Serialise an EasyRdf_Graph into RDF format of choice.
*
- * @param object EasyRdf_Graph $graph An EasyRdf_Graph object.
- * @param string $format The name of the format to convert to.
+ * @param EasyRdf_Graph $graph An EasyRdf_Graph object.
+ * @param string $format The name of the format to convert to.
+ * @param array $options
+ * @throws EasyRdf_Exception
* @return string The RDF in the new desired format.
*/
- public function serialise($graph, $format)
+ public function serialise($graph, $format, array $options = array())
{
parent::checkSerialiseParams($graph, $format);
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/GraphViz.php b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/GraphViz.php
index 632f932..2fd22da 100644
--- a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/GraphViz.php
+++ b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/GraphViz.php
@@ -5,7 +5,7 @@
*
* LICENSE
*
- * Copyright (c) 2012 Nicholas J Humfrey. All rights reserved.
+ * Copyright (c) 2012-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:
@@ -31,9 +31,8 @@
* POSSIBILITY OF SUCH DAMAGE.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
- * @version $Id$
*/
/**
@@ -44,7 +43,7 @@
* See http://www.graphviz.org/ for more information.
*
* @package EasyRdf
- * @copyright Copyright (c) 2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2012-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
*/
class EasyRdf_Serialiser_GraphViz extends EasyRdf_Serialiser
@@ -185,7 +184,7 @@ class EasyRdf_Serialiser_GraphViz extends EasyRdf_Serialiser
protected function nodeName($entity)
{
if ($entity instanceof EasyRdf_Resource) {
- if ($entity->isBnode()) {
+ if ($entity->isBNode()) {
return "B".$entity->getUri();
} else {
return "R".$entity->getUri();
@@ -367,11 +366,13 @@ class EasyRdf_Serialiser_GraphViz extends EasyRdf_Serialiser
*
* Supported output format names: dot, gif, png, svg
*
- * @param string $graph An EasyRdf_Graph object.
- * @param string $format The name of the format to convert to.
+ * @param EasyRdf_Graph $graph An EasyRdf_Graph object.
+ * @param string $format The name of the format to convert to.
+ * @param array $options
+ * @throws EasyRdf_Exception
* @return string The RDF in the new desired format.
*/
- public function serialise($graph, $format)
+ public function serialise($graph, $format, array $options = array())
{
parent::checkSerialiseParams($graph, $format);
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/Json.php b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/Json.php
index d2bc15e..bc0ae7a 100644
--- a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/Json.php
+++ b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/Json.php
@@ -5,7 +5,7 @@
*
* LICENSE
*
- * Copyright (c) 2009-2010 Nicholas J Humfrey. All rights reserved.
+ * 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:
@@ -31,9 +31,8 @@
* POSSIBILITY OF SUCH DAMAGE.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2010 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
- * @version $Id$
*/
/**
@@ -41,7 +40,7 @@
* with no external dependancies.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2010 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
*/
class EasyRdf_Serialiser_Json extends EasyRdf_Serialiser_RdfPhp
@@ -51,11 +50,13 @@ class EasyRdf_Serialiser_Json extends EasyRdf_Serialiser_RdfPhp
*
* http://n2.talis.com/wiki/RDF_JSON_Specification
*
- * @param object EasyRdf_Graph $graph An EasyRdf_Graph object.
- * @param string $format The name of the format to convert to.
- * @return string The RDF in the new desired format.
+ * @param EasyRdf_Graph $graph An EasyRdf_Graph object.
+ * @param string $format The name of the format to convert to.
+ * @param array $options
+ * @throws EasyRdf_Exception
+ * @return string The RDF in the new desired format.
*/
- public function serialise($graph, $format)
+ public function serialise($graph, $format, array $options = array())
{
parent::checkSerialiseParams($graph, $format);
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/JsonLd.php b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/JsonLd.php
new file mode 100644
index 0000000..4265773
--- /dev/null
+++ b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/JsonLd.php
@@ -0,0 +1,42 @@
+<?php
+
+/**
+ * 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
+ */
+
+if (PHP_MAJOR_VERSION > 5 or (PHP_MAJOR_VERSION == 5 and PHP_MINOR_VERSION >= 3)) {
+ require dirname(__FILE__).'/JsonLd_real.php';
+} else {
+ throw new LogicException("JSON-LD support requires PHP 5.3+");
+}
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/JsonLd_real.php b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/JsonLd_real.php
new file mode 100644
index 0000000..a744f0f
--- /dev/null
+++ b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/JsonLd_real.php
@@ -0,0 +1,135 @@
+<?php
+
+/**
+ * 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
+ */
+
+/**
+ * Class to serialise an EasyRdf_Graph to JSON-LD
+ *
+ * @package EasyRdf
+ * @copyright Copyright (c) 2013 Alexey Zakhlestin
+ * @license http://www.opensource.org/licenses/bsd-license.php
+ */
+class EasyRdf_Serialiser_JsonLd extends EasyRdf_Serialiser
+{
+ public function __construct()
+ {
+ if (!class_exists('\ML\JsonLD\JsonLD')) {
+ throw new LogicException('Please install "ml/json-ld" dependency to use JSON-LD serialisation');
+ }
+
+ parent::__construct();
+ }
+
+ /**
+ * @param EasyRdf_Graph $graph
+ * @param string $format
+ * @param array $options
+ * @throws EasyRdf_Exception
+ * @return string
+ */
+ public function serialise($graph, $format, array $options = array())
+ {
+ parent::checkSerialiseParams($graph, $format);
+
+ if ($format != 'jsonld') {
+ throw new EasyRdf_Exception(__CLASS__.' does not support: '.$format);
+ }
+
+
+ $ld_graph = new \ML\JsonLD\Graph();
+ $nodes = array(); // cache for id-to-node association
+
+ foreach ($graph->toRdfPhp() as $resource => $properties) {
+ if (array_key_exists($resource, $nodes)) {
+ $node = $nodes[$resource];
+ } else {
+ $node = $ld_graph->createNode($resource);
+ $nodes[$resource] = $node;
+ }
+
+ foreach ($properties as $property => $values) {
+ foreach ($values as $value) {
+ if ($value['type'] == 'bnode' or $value['type'] == 'uri') {
+ if (array_key_exists($value['value'], $nodes)) {
+ $_value = $nodes[$value['value']];
+ } else {
+ $_value = $ld_graph->createNode($value['value']);
+ $nodes[$value['value']] = $_value;
+ }
+ } elseif ($value['type'] == 'literal') {
+ if (isset($value['lang'])) {
+ $_value = new \ML\JsonLD\LanguageTaggedString($value['value'], $value['lang']);
+ } elseif (isset($value['datatype'])) {
+ $_value = new \ML\JsonLD\TypedValue($value['value'], $value['datatype']);
+ } else {
+ $_value = $value['value'];
+ }
+ } else {
+ throw new EasyRdf_Exception(
+ "Unable to serialise object to JSON-LD: ".$value['type']
+ );
+ }
+
+ if ($property == "http://www.w3.org/1999/02/22-rdf-syntax-ns#type") {
+ $node->addType($_value);
+ } else {
+ $node->addPropertyValue($property, $_value);
+ }
+ }
+ }
+ }
+
+ // OPTIONS
+ $use_native_types = !(isset($options['expand_native_types']) and $options['expand_native_types'] == true);
+ $should_compact = (isset($options['compact']) and $options['compact'] == true);
+
+ // expanded form
+ $data = $ld_graph->toJsonLd($use_native_types);
+
+ if ($should_compact) {
+ // compact form
+ $compact_context = isset($options['context']) ? $options['context'] : null;
+ $compact_options = array(
+ 'useNativeTypes' => $use_native_types,
+ 'base' => $graph->getUri()
+ );
+
+ $data = \ML\JsonLD\JsonLD::compact($data, $compact_context, $compact_options);
+ }
+
+ return \ML\JsonLD\JsonLD::toString($data);
+ }
+}
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/Ntriples.php b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/Ntriples.php
index 0257751..d77a638 100644
--- a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/Ntriples.php
+++ b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/Ntriples.php
@@ -5,7 +5,7 @@
*
* LICENSE
*
- * Copyright (c) 2009-2012 Nicholas J Humfrey. All rights reserved.
+ * 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:
@@ -31,9 +31,8 @@
* POSSIBILITY OF SUCH DAMAGE.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
- * @version $Id$
*/
/**
@@ -41,7 +40,7 @@
* with no external dependancies.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
*/
class EasyRdf_Serialiser_Ntriples extends EasyRdf_Serialiser
@@ -142,7 +141,7 @@ class EasyRdf_Serialiser_Ntriples extends EasyRdf_Serialiser
/**
* @ignore
*/
- protected function ntriplesResource($res)
+ protected function serialiseResource($res)
{
$escaped = $this->escapeString($res);
if (substr($res, 0, 2) == '_:') {
@@ -153,12 +152,23 @@ class EasyRdf_Serialiser_Ntriples extends EasyRdf_Serialiser
}
/**
- * @ignore
+ * Serialise an RDF value into N-Triples
+ *
+ * The value can either be an array in RDF/PHP form, or
+ * an EasyRdf_Literal or EasyRdf_Resource object.
+ *
+ * @param array|object $value An associative array or an object
+ * @throws EasyRdf_Exception
+ * @return string The RDF value serialised to N-Triples
*/
- protected function ntriplesValue($value)
+ public function serialiseValue($value)
{
+ if (is_object($value)) {
+ $value = $value->toRdfPhp();
+ }
+
if ($value['type'] == 'uri' or $value['type'] == 'bnode') {
- return $this->ntriplesResource($value['value']);
+ return $this->serialiseResource($value['value']);
} elseif ($value['type'] == 'literal') {
$escaped = $this->escapeString($value['value']);
if (isset($value['lang'])) {
@@ -172,7 +182,7 @@ class EasyRdf_Serialiser_Ntriples extends EasyRdf_Serialiser
}
} else {
throw new EasyRdf_Exception(
- "Unable to serialise object to ntriples: ".$value['type']
+ "Unable to serialise object of type '".$value['type']."' to ntriples: "
);
}
}
@@ -180,22 +190,24 @@ class EasyRdf_Serialiser_Ntriples extends EasyRdf_Serialiser
/**
* Serialise an EasyRdf_Graph into N-Triples
*
- * @param object EasyRdf_Graph $graph An EasyRdf_Graph object.
- * @param string $format The name of the format to convert to.
- * @return string The RDF in the new desired format.
+ * @param EasyRdf_Graph $graph An EasyRdf_Graph object.
+ * @param string $format The name of the format to convert to.
+ * @param array $options
+ * @throws EasyRdf_Exception
+ * @return string The RDF in the new desired format.
*/
- public function serialise($graph, $format)
+ public function serialise($graph, $format, array $options = array())
{
parent::checkSerialiseParams($graph, $format);
if ($format == 'ntriples') {
$nt = '';
- foreach ($graph->toArray() as $resource => $properties) {
+ foreach ($graph->toRdfPhp() as $resource => $properties) {
foreach ($properties as $property => $values) {
foreach ($values as $value) {
- $nt .= $this->ntriplesResource($resource)." ";
+ $nt .= $this->serialiseResource($resource)." ";
$nt .= "<" . $this->escapeString($property) . "> ";
- $nt .= $this->ntriplesValue($value)." .\n";
+ $nt .= $this->serialiseValue($value)." .\n";
}
}
}
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/Rapper.php b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/Rapper.php
index a23b6c3..ba42bc5 100644
--- a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/Rapper.php
+++ b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/Rapper.php
@@ -5,7 +5,7 @@
*
* LICENSE
*
- * Copyright (c) 2009-2012 Nicholas J Humfrey. All rights reserved.
+ * 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:
@@ -31,9 +31,8 @@
* POSSIBILITY OF SUCH DAMAGE.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
- * @version $Id$
*/
/**
@@ -43,7 +42,7 @@
* Note: the built-in N-Triples serialiser is used to pass data to Rapper.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
*/
class EasyRdf_Serialiser_Rapper extends EasyRdf_Serialiser_Ntriples
@@ -71,11 +70,12 @@ class EasyRdf_Serialiser_Rapper extends EasyRdf_Serialiser_Ntriples
/**
* Serialise an EasyRdf_Graph to the RDF format of choice.
*
- * @param object EasyRdf_Graph $graph An EasyRdf_Graph object.
- * @param string $format The name of the format to convert to.
- * @return string The RDF in the new desired format.
+ * @param EasyRdf_Graph $graph An EasyRdf_Graph object.
+ * @param string $format The name of the format to convert to.
+ * @param array $options
+ * @return string The RDF in the new desired format.
*/
- public function serialise($graph, $format)
+ public function serialise($graph, $format, array $options = array())
{
parent::checkSerialiseParams($graph, $format);
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/RdfPhp.php b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/RdfPhp.php
index e6a8647..7ec80b0 100644
--- a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/RdfPhp.php
+++ b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/RdfPhp.php
@@ -5,7 +5,7 @@
*
* LICENSE
*
- * Copyright (c) 2009-2010 Nicholas J Humfrey. All rights reserved.
+ * 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:
@@ -31,9 +31,8 @@
* POSSIBILITY OF SUCH DAMAGE.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2010 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
- * @version $Id$
*/
/**
@@ -41,7 +40,7 @@
* with no external dependancies.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2010 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
*/
class EasyRdf_Serialiser_RdfPhp extends EasyRdf_Serialiser
@@ -51,11 +50,13 @@ class EasyRdf_Serialiser_RdfPhp extends EasyRdf_Serialiser
*
* http://n2.talis.com/wiki/RDF_PHP_Specification
*
- * @param object EasyRdf_Graph $graph An EasyRdf_Graph object.
- * @param string $format The name of the format to convert to.
- * @return string The RDF in the new desired format.
+ * @param EasyRdf_Graph $graph An EasyRdf_Graph object.
+ * @param string $format The name of the format to convert to.
+ * @param array $options
+ * @throws EasyRdf_Exception
+ * @return string The RDF in the new desired format.
*/
- public function serialise($graph, $format)
+ public function serialise($graph, $format, array $options = array())
{
parent::checkSerialiseParams($graph, $format);
@@ -65,7 +66,7 @@ class EasyRdf_Serialiser_RdfPhp extends EasyRdf_Serialiser
);
}
- // Graph is already stored an RDF/PHP resource-centric array internally within the EasyRdf_Graph object
- return $graph->toArray();
+ // Graph is already stored as RDF/PHP resource-centric array internally within the EasyRdf_Graph object
+ return $graph->toRdfPhp();
}
}
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/RdfXml.php b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/RdfXml.php
index 1936d8f..d448578 100644
--- a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/RdfXml.php
+++ b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/RdfXml.php
@@ -4,7 +4,7 @@
*
* LICENSE
*
- * Copyright (c) 2009-2010 Nicholas J Humfrey. All rights reserved.
+ * 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:
@@ -30,9 +30,8 @@
* POSSIBILITY OF SUCH DAMAGE.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2010 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
- * @version $Id$
*/
/**
@@ -40,7 +39,7 @@
* with no external dependancies.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2010 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
*/
class EasyRdf_Serialiser_RdfXml extends EasyRdf_Serialiser
@@ -65,7 +64,7 @@ class EasyRdf_Serialiser_RdfXml extends EasyRdf_Serialiser
$tag = "$indent<$property";
if ($obj->isBNode()) {
if ($alreadyOutput or $rpcount > 1 or $pcount == 0) {
- $tag .= " rdf:nodeID=\"".htmlspecialchars($obj->getNodeId()).'"';
+ $tag .= " rdf:nodeID=\"".htmlspecialchars($obj->getBNodeId()).'"';
}
} else {
if ($alreadyOutput or $rpcount != 1 or $pcount == 0) {
@@ -143,29 +142,35 @@ class EasyRdf_Serialiser_RdfXml extends EasyRdf_Serialiser
$xml = "\n$indent<$type";
if ($res->isBNode()) {
if ($showNodeId) {
- $xml .= ' rdf:nodeID="'.htmlspecialchars($res->getNodeId()).'"';
+ $xml .= ' rdf:nodeID="'.htmlspecialchars($res->getBNodeId()).'"';
}
} else {
$xml .= ' rdf:about="'.htmlspecialchars($res->getUri()).'"';
}
$xml .= ">\n";
- foreach ($properties as $property) {
- $short = EasyRdf_Namespace::shorten($property, true);
- if ($short) {
- $this->addPrefix($short);
- $objects = $res->all("<$property>");
- if ($short == 'rdf:type') {
- array_shift($objects);
- }
- foreach ($objects as $object) {
- $xml .= $this->rdfxmlObject($short, $object, $depth+1);
+ if ($res instanceof EasyRdf_Container) {
+ foreach ($res as $item) {
+ $xml .= $this->rdfxmlObject('rdf:li', $item, $depth+1);
+ }
+ } else {
+ foreach ($properties as $property) {
+ $short = EasyRdf_Namespace::shorten($property, true);
+ if ($short) {
+ $this->addPrefix($short);
+ $objects = $res->all("<$property>");
+ if ($short == 'rdf:type') {
+ array_shift($objects);
+ }
+ foreach ($objects as $object) {
+ $xml .= $this->rdfxmlObject($short, $object, $depth+1);
+ }
+ } else {
+ throw new EasyRdf_Exception(
+ "It is not possible to serialse the property ".
+ "'$property' to RDF/XML."
+ );
}
- } else {
- throw new EasyRdf_Exception(
- "It is not possible to serialse the property ".
- "'$property' to RDF/XML."
- );
}
}
$xml .= "$indent</$type>\n";
@@ -177,11 +182,13 @@ class EasyRdf_Serialiser_RdfXml extends EasyRdf_Serialiser
/**
* Method to serialise an EasyRdf_Graph to RDF/XML
*
- * @param object EasyRdf_Graph $graph An EasyRdf_Graph object.
- * @param string $format The name of the format to convert to.
- * @return string The RDF in the new desired format.
+ * @param EasyRdf_Graph $graph An EasyRdf_Graph object.
+ * @param string $format The name of the format to convert to.
+ * @param array $options
+ * @throws EasyRdf_Exception
+ * @return string The RDF in the new desired format.
*/
- public function serialise($graph, $format)
+ public function serialise($graph, $format, array $options = array())
{
parent::checkSerialiseParams($graph, $format);
@@ -198,8 +205,19 @@ class EasyRdf_Serialiser_RdfXml extends EasyRdf_Serialiser
$this->outputtedResources = array();
$xml = '';
+
+ // Serialise URIs first
foreach ($graph->resources() as $resource) {
- $xml .= $this->rdfxmlResource($resource, true, 1);
+ if (!$resource->isBnode()) {
+ $xml .= $this->rdfxmlResource($resource, true);
+ }
+ }
+
+ // Serialise bnodes afterwards
+ foreach ($graph->resources() as $resource) {
+ if ($resource->isBnode()) {
+ $xml .= $this->rdfxmlResource($resource, true);
+ }
}
// iterate through namepsaces array prefix and output a string.
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/Turtle.php b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/Turtle.php
index dfc817d..0a89d38 100644
--- a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/Turtle.php
+++ b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/Turtle.php
@@ -5,7 +5,7 @@
*
* LICENSE
*
- * Copyright (c) 2009-2012 Nicholas J Humfrey. All rights reserved.
+ * 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:
@@ -31,19 +31,18 @@
* POSSIBILITY OF SUCH DAMAGE.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
- * @version $Id$
*/
/**
* Class to serialise an EasyRdf_Graph to Turtle
* with no external dependancies.
*
- * http://www.dajobe.org/2004/01/turtle
+ * http://www.w3.org/TR/turtle/
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
*/
class EasyRdf_Serialiser_Turtle extends EasyRdf_Serialiser
@@ -51,28 +50,26 @@ class EasyRdf_Serialiser_Turtle extends EasyRdf_Serialiser
private $outputtedBnodes = array();
/**
- * @ignore
+ * Given a IRI string, escape and enclose in angle brackets.
+ *
+ * @param string $resourceIri
+ * @return string
*/
- protected function serialiseResource($resource)
+ public static function escapeIri($resourceIri)
{
- if ($resource->isBnode()) {
- return $resource->getUri();
- } else {
- $short = $resource->shorten();
- if ($short) {
- $this->addPrefix($short);
- return $short;
- } else {
- $uri = str_replace('>', '\\>', $resource);
- return "<$resource>";
- }
- }
+ $escapedIri = str_replace('>', '\\>', $resourceIri);
+ return "<$escapedIri>";
}
/**
- * @ignore
+ * Given a string, enclose in quotes and escape any quotes in the string.
+ * Strings containing tabs, linefeeds or carriage returns will be
+ * enclosed in three double quotes (""").
+ *
+ * @param string $value
+ * @return string
*/
- protected function quotedString($value)
+ public static function quotedString($value)
{
if (preg_match("/[\t\n\r]/", $value)) {
$escaped = str_replace(array('\\', '"""'), array('\\\\', '\\"""'), $value);
@@ -84,41 +81,122 @@ class EasyRdf_Serialiser_Turtle extends EasyRdf_Serialiser
}
/**
- * @ignore
+ * Given a an EasyRdf_Resource or URI, convert it into a string, suitable to
+ * be written to a Turtle document. URIs will be shortened into CURIES
+ * where possible.
+ *
+ * @param EasyRdf_Resource $resource The resource to convert to a Turtle string
+ * @param boolean $createNamespace If true, a new namespace may be created
+ * @return string
+ */
+ public function serialiseResource($resource, $createNamespace = false)
+ {
+ if (is_object($resource)) {
+ if ($resource->isBNode()) {
+ return $resource->getUri();
+ } else {
+ $resource = $resource->getUri();
+ }
+ }
+
+ $short = EasyRdf_Namespace::shorten($resource, $createNamespace);
+ if ($short) {
+ $this->addPrefix($short);
+ return $short;
+ } else {
+ return self::escapeIri($resource);
+ }
+ }
+
+ /**
+ * Given an EasyRdf_Literal object, convert it into a string, suitable to
+ * be written to a Turtle document. Supports multiline literals and literals with
+ * datatypes or languages.
+ *
+ * @param EasyRdf_Literal $literal
+ * @return string
+ */
+ public function serialiseLiteral($literal)
+ {
+ $value = strval($literal);
+ $quoted = self::quotedString($value);
+
+ if ($datatype = $literal->getDatatypeUri()) {
+ if ($datatype == 'http://www.w3.org/2001/XMLSchema#integer') {
+ return sprintf('%d', $value);
+ } elseif ($datatype == 'http://www.w3.org/2001/XMLSchema#decimal') {
+ return sprintf('%g', $value);
+ } elseif ($datatype == 'http://www.w3.org/2001/XMLSchema#double') {
+ return sprintf('%e', $value);
+ } elseif ($datatype == 'http://www.w3.org/2001/XMLSchema#boolean') {
+ return sprintf('%s', $value ? 'true' : 'false');
+ } else {
+ $escaped = $this->serialiseResource($datatype, true);
+ return sprintf('%s^^%s', $quoted, $escaped);
+ }
+ } elseif ($lang = $literal->getLang()) {
+ return $quoted . '@' . $lang;
+ } else {
+ return $quoted;
+ }
+ }
+
+ /**
+ * Convert an EasyRdf object into a string suitable to
+ * be written to a Turtle document.
+ *
+ * @param EasyRdf_Resource|EasyRdf_Literal $object
+ * @return string
*/
- protected function serialiseObject($object)
+ public function serialiseObject($object)
{
if ($object instanceof EasyRdf_Resource) {
return $this->serialiseResource($object);
+ } elseif ($object instanceof EasyRdf_Literal) {
+ return $this->serialiseLiteral($object);
} else {
- $value = strval($object);
- $quoted = $this->quotedString($value);
-
- if ($datatype = $object->getDatatypeUri()) {
- $short = EasyRdf_Namespace::shorten($datatype, true);
- if ($short) {
- $this->addPrefix($short);
- if ($short == 'xsd:integer') {
- return sprintf('%d', $value);
- } elseif ($short == 'xsd:decimal') {
- return sprintf('%g', $value);
- } elseif ($short == 'xsd:double') {
- return sprintf('%e', $value);
- } elseif ($short == 'xsd:boolean') {
- return sprintf('%s', $value ? 'true' : 'false');
- } else {
- return sprintf('%s^^%s', $quoted, $short);
- }
+ throw new InvalidArgumentException(
+ "serialiseObject() requires \$object to be ".
+ "of type EasyRdf_Resource or EasyRdf_Literal"
+ );
+ }
+ }
+
+
+ /**
+ * Protected method to serialise a RDF collection
+ * @ignore
+ */
+ protected function serialiseCollection($node, $indent)
+ {
+ $turtle = '(';
+ $count = 0;
+ while ($node) {
+ if ($id = $node->getBNodeId()) {
+ $this->outputtedBnodes[$id] = true;
+ }
+
+ $value = $node->get('rdf:first');
+ $node = $node->get('rdf:rest');
+ if ($node and $node->hasProperty('rdf:first')) {
+ $count++;
+ }
+
+ if ($value !== null) {
+ $serialised = $this->serialiseObject($value);
+ if ($count) {
+ $turtle .= "\n$indent $serialised";
} else {
- $datatypeUri = str_replace('>', '\\>', $datatype);
- return sprintf('%s^^<%s>', $quoted, $datatypeUri);
+ $turtle .= " ".$serialised;
}
- } elseif ($lang = $object->getLang()) {
- return $quoted . '@' . $lang;
- } else {
- return $quoted;
}
}
+ if ($count) {
+ $turtle .= "\n$indent)";
+ } else {
+ $turtle .= " )";
+ }
+ return $turtle;
}
/**
@@ -137,16 +215,10 @@ class EasyRdf_Serialiser_Turtle extends EasyRdf_Serialiser
$pCount = 0;
foreach ($properties as $property) {
- $short = EasyRdf_Namespace::shorten($property, true);
- if ($short) {
- if ($short == 'rdf:type') {
- $pStr = 'a';
- } else {
- $this->addPrefix($short);
- $pStr = $short;
- }
+ if ($property === 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type') {
+ $pStr = 'a';
} else {
- $pStr = '<'.str_replace('>', '\\>', $property).'>';
+ $pStr = $this->serialiseResource($property, true);
}
if ($pCount) {
@@ -161,8 +233,10 @@ class EasyRdf_Serialiser_Turtle extends EasyRdf_Serialiser
$turtle .= ',';
}
- if ($object instanceof EasyRdf_Resource and $object->isBnode()) {
- $id = $object->getNodeId();
+ if ($object instanceof EasyRdf_Collection) {
+ $turtle .= ' ' . $this->serialiseCollection($object, $indent);
+ } elseif ($object instanceof EasyRdf_Resource and $object->isBNode()) {
+ $id = $object->getBNodeId();
$rpcount = $this->reversePropertyCount($object);
if ($rpcount <= 1 and !isset($this->outputtedBnodes[$id])) {
// Nested unlabelled Blank Node
@@ -208,41 +282,33 @@ class EasyRdf_Serialiser_Turtle extends EasyRdf_Serialiser
}
/**
- * Serialise an EasyRdf_Graph to Turtle.
- *
- * @param object EasyRdf_Graph $graph An EasyRdf_Graph object.
- * @param string $format The name of the format to convert to.
- * @return string The RDF in the new desired format.
+ * @ignore
*/
- public function serialise($graph, $format)
+ protected function serialiseSubjects($graph, $filterType)
{
- parent::checkSerialiseParams($graph, $format);
-
- if ($format != 'turtle' and $format != 'n3') {
- throw new EasyRdf_Exception(
- "EasyRdf_Serialiser_Turtle does not support: $format"
- );
- }
-
- $this->prefixes = array();
- $this->outputtedBnodes = array();
-
$turtle = '';
foreach ($graph->resources() as $resource) {
+ /** @var $resource EasyRdf_Resource */
// If the resource has no properties - don't serialise it
$properties = $resource->propertyUris();
if (count($properties) == 0) {
continue;
}
- if ($resource->isBnode()) {
- $id = $resource->getNodeId();
- $rpcount = $this->reversePropertyCount($resource);
+ // Is this node of the right type?
+ $thisType = $resource->isBNode() ? 'bnode' : 'uri';
+ if ($thisType != $filterType) {
+ continue;
+ }
+
+ if ($thisType == 'bnode') {
+ $id = $resource->getBNodeId();
if (isset($this->outputtedBnodes[$id])) {
// Already been serialised
continue;
} else {
$this->outputtedBnodes[$id] = true;
+ $rpcount = $this->reversePropertyCount($resource);
if ($rpcount == 0) {
$turtle .= '[]';
} else {
@@ -256,6 +322,34 @@ class EasyRdf_Serialiser_Turtle extends EasyRdf_Serialiser
$turtle .= $this->serialiseProperties($resource);
$turtle .= "\n";
}
+ return $turtle;
+ }
+
+ /**
+ * Serialise an EasyRdf_Graph to Turtle.
+ *
+ * @param EasyRdf_Graph $graph An EasyRdf_Graph object.
+ * @param string $format The name of the format to convert to.
+ * @param array $options
+ * @throws EasyRdf_Exception
+ * @return string The RDF in the new desired format.
+ */
+ public function serialise($graph, $format, array $options = array())
+ {
+ parent::checkSerialiseParams($graph, $format);
+
+ if ($format != 'turtle' and $format != 'n3') {
+ throw new EasyRdf_Exception(
+ "EasyRdf_Serialiser_Turtle does not support: $format"
+ );
+ }
+
+ $this->prefixes = array();
+ $this->outputtedBnodes = array();
+
+ $turtle = '';
+ $turtle .= $this->serialiseSubjects($graph, 'uri');
+ $turtle .= $this->serialiseSubjects($graph, 'bnode');
if (count($this->prefixes)) {
return $this->serialisePrefixes() . "\n" . $turtle;
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Sparql/Client.php b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Sparql/Client.php
index 35eca3d..2cf9ad5 100644
--- a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Sparql/Client.php
+++ b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Sparql/Client.php
@@ -5,7 +5,7 @@
*
* LICENSE
*
- * Copyright (c) 2009-2012 Nicholas J Humfrey. All rights reserved.
+ * 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:
@@ -31,22 +31,24 @@
* POSSIBILITY OF SUCH DAMAGE.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
- * @version $Id$
*/
/**
* Class for making SPARQL queries using the SPARQL 1.1 Protocol
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
*/
class EasyRdf_Sparql_Client
{
- /** The address of the SPARQL Endpoint */
- private $uri = null;
+ /** The query/read address of the SPARQL Endpoint */
+ private $queryUri = null;
+
+ /** The update/write address of the SPARQL Endpoint */
+ private $updateUri = null;
/** Configuration settings */
private $config = array();
@@ -54,20 +56,47 @@ class EasyRdf_Sparql_Client
/** Create a new SPARQL endpoint client
*
- * @param string $uri The address of the SPARQL Endpoint
+ * If the query and update endpoints are the same, then you
+ * only need to give a single URI.
+ *
+ * @param string $queryUri The address of the SPARQL Query Endpoint
+ * @param string $updateUri Optional address of the SPARQL Update Endpoint
+ */
+ public function __construct($queryUri, $updateUri = null)
+ {
+ $this->queryUri = $queryUri;
+ if ($updateUri) {
+ $this->updateUri = $updateUri;
+ } else {
+ $this->updateUri = $queryUri;
+ }
+ }
+
+ /** Get the URI of the SPARQL query endpoint
+ *
+ * @return string The query URI of the SPARQL endpoint
*/
- public function __construct($uri)
+ public function getQueryUri()
{
- $this->uri = $uri;
+ return $this->queryUri;
}
- /** Get the URI of the SPARQL endpoint
+ /** Get the URI of the SPARQL update endpoint
*
- * @return string The URI of the SPARQL endpoint
+ * @return string The query URI of the SPARQL endpoint
+ */
+ public function getUpdateUri()
+ {
+ return $this->updateUri;
+ }
+
+ /**
+ * @depredated
+ * @ignore
*/
public function getUri()
{
- return $this->uri;
+ return $this->queryUri;
}
/** Make a query to the SPARQL endpoint
@@ -83,7 +112,119 @@ class EasyRdf_Sparql_Client
*/
public function query($query)
{
- # Add namespaces to the queryString
+ return $this->request('query', $query);
+ }
+
+ /** Count the number of triples in a SPARQL 1.1 endpoint
+ *
+ * Performs a SELECT query to estriblish the total number of triples.
+ *
+ * Counts total number of triples by default but a conditional triple pattern
+ * can be given to count of a subset of all triples.
+ *
+ * @param string $condition Triple-pattern condition for the count query
+ * @return integer The number of triples
+ */
+ public function countTriples($condition = '?s ?p ?o')
+ {
+ // SELECT (COUNT(*) AS ?count)
+ // WHERE {
+ // {?s ?p ?o}
+ // UNION
+ // {GRAPH ?g {?s ?p ?o}}
+ // }
+ $result = $this->query('SELECT (COUNT(*) AS ?count) {'.$condition.'}');
+ return $result[0]->count->getValue();
+ }
+
+ /** Get a list of named graphs from a SPARQL 1.1 endpoint
+ *
+ * Performs a SELECT query to get a list of the named graphs
+ *
+ * @param string $limit Optional limit to the number of results
+ * @return array Array of EasyRdf_Resource objects for each named graph
+ */
+ public function listNamedGraphs($limit = null)
+ {
+ $query = "SELECT DISTINCT ?g WHERE {GRAPH ?g {?s ?p ?o}}";
+ if (!is_null($limit)) {
+ $query .= " LIMIT ".(int)$limit;
+ }
+ $result = $this->query($query);
+
+ // Convert the result object into an array of resources
+ $graphs = array();
+ foreach ($result as $row) {
+ array_push($graphs, $row->g);
+ }
+ return $graphs;
+ }
+
+ /** Make an update request to the SPARQL endpoint
+ *
+ * Successful responses will return the HTTP response object
+ *
+ * Unsuccessful responses will throw an exception
+ *
+ * @param string $query The update query string to be executed
+ * @return object EasyRdf_Http_Response HTTP response
+ */
+ public function update($query)
+ {
+ return $this->request('update', $query);
+ }
+
+ public function insert($data, $graphUri = null)
+ {
+ #$this->updateData('INSET',
+ $query = 'INSERT DATA {';
+ if ($graphUri) {
+ $query .= "GRAPH <$graphUri> {";
+ }
+ $query .= $this->convertToTriples($data);
+ if ($graphUri) {
+ $query .= "}";
+ }
+ $query .= '}';
+ return $this->update($query);
+ }
+
+ protected function updateData($operation, $data, $graphUri = null)
+ {
+ $query = "$operation DATA {";
+ if ($graphUri) {
+ $query .= "GRAPH <$graphUri> {";
+ }
+ $query .= $this->convertToTriples($data);
+ if ($graphUri) {
+ $query .= "}";
+ }
+ $query .= '}';
+ return $this->update($query);
+ }
+
+ public function clear($graphUri, $silent = false)
+ {
+ $query = "CLEAR";
+ if ($silent) {
+ $query .= " SILENT";
+ }
+ if (preg_match("/^all|named|default$/i", $graphUri)) {
+ $query .= " $graphUri";
+ } else {
+ $query .= " GRAPH <$graphUri>";
+ }
+ return $this->update($query);
+ }
+
+ /*
+ * Internal function to make an HTTP request to SPARQL endpoint
+ *
+ * @ignore
+ */
+ protected function request($type, $query)
+ {
+ // Check for undefined prefixes
$prefixes = '';
foreach (EasyRdf_Namespace::namespaces() as $prefix => $uri) {
if (strpos($query, "$prefix:") !== false and
@@ -94,9 +235,8 @@ class EasyRdf_Sparql_Client
$client = EasyRdf_Http::getDefaultHttpClient();
$client->resetParameters();
- $client->setUri($this->uri);
- $client->setMethod('GET');
+ // Tell the server which response formats we can parse
$accept = EasyRdf_Format::getHttpAcceptHeader(
array(
'application/sparql-results+json' => 1.0,
@@ -104,17 +244,40 @@ class EasyRdf_Sparql_Client
)
);
$client->setHeaders('Accept', $accept);
- $client->setParameterGet('query', $prefixes . $query);
+
+ if ($type == 'update') {
+ $client->setMethod('POST');
+ $client->setUri($this->updateUri);
+ $client->setRawData($prefixes . $query);
+ $client->setHeaders('Content-Type', 'application/sparql-update');
+ } elseif ($type == 'query') {
+ // Use GET if the query is less than 2kB
+ // 2046 = 2kB minus 1 for '?' and 1 for NULL-terminated string on server
+ $encodedQuery = 'query='.urlencode($prefixes . $query);
+ if (strlen($encodedQuery) + strlen($this->queryUri) <= 2046) {
+ $client->setMethod('GET');
+ $client->setUri($this->queryUri.'?'.$encodedQuery);
+ } else {
+ // Fall back to POST instead (which is un-cacheable)
+ $client->setMethod('POST');
+ $client->setUri($this->queryUri);
+ $client->setRawData($encodedQuery);
+ $client->setHeaders('Content-Type', 'application/x-www-form-urlencoded');
+ }
+ }
$response = $client->request();
- if ($response->isSuccessful()) {
+ if ($response->getStatus() == 204) {
+ // No content
+ return $response;
+ } elseif ($response->isSuccessful()) {
list($type, $params) = EasyRdf_Utils::parseMimeType(
$response->getHeader('Content-Type')
);
if (strpos($type, 'application/sparql-results') === 0) {
return new EasyRdf_Sparql_Result($response->getBody(), $type);
} else {
- return new EasyRdf_Graph($this->uri, $response->getBody(), $type);
+ return new EasyRdf_Graph($this->queryUri, $response->getBody(), $type);
}
} else {
throw new EasyRdf_Exception(
@@ -123,12 +286,17 @@ class EasyRdf_Sparql_Client
}
}
- /** Magic method to return URI of the SPARQL endpoint when casted to string
- *
- * @return string The URI of the SPARQL endpoint
- */
- public function __toString()
+ protected function convertToTriples($data)
{
- return $this->uri == null ? '' : $this->uri;
+ if (is_string($data)) {
+ return $data;
+ } elseif (is_object($data) and $data instanceof EasyRdf_Graph) {
+ # FIXME: insert Turtle when there is a way of seperateing out the prefixes
+ return $data->serialise('ntriples');
+ } else {
+ throw new EasyRdf_Exception(
+ "Don't know how to convert to triples for SPARQL query: ".$response->getBody()
+ );
+ }
}
}
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Sparql/Result.php b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Sparql/Result.php
index 6bc7f62..22001e9 100644
--- a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Sparql/Result.php
+++ b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Sparql/Result.php
@@ -5,7 +5,7 @@
*
* LICENSE
*
- * Copyright (c) 2009-2012 Nicholas J Humfrey. All rights reserved.
+ * 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:
@@ -31,16 +31,15 @@
* POSSIBILITY OF SUCH DAMAGE.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
- * @version $Id$
*/
/**
* Class for returned for SPARQL SELECT and ASK query responses.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
*/
class EasyRdf_Sparql_Result extends ArrayIterator
@@ -152,13 +151,13 @@ class EasyRdf_Sparql_Result extends ArrayIterator
* This method is intended to be a debugging aid and will
* return a pretty-print view of the query result.
*
- * @param bool $html Set to true to format the dump using HTML
+ * @param string $format Either 'text' or 'html'
*/
- public function dump($html = true)
+ public function dump($format = 'html')
{
if ($this->type == 'bindings') {
$result = '';
- if ($html) {
+ if ($format == 'html') {
$result .= "<table class='sparql-results' style='border-collapse:collapse'>";
$result .= "<tr>";
foreach ($this->fields as $field) {
@@ -170,9 +169,13 @@ class EasyRdf_Sparql_Result extends ArrayIterator
foreach ($this as $row) {
$result .= "<tr>";
foreach ($this->fields as $field) {
- $result .= "<td style='border:solid 1px #000;padding:4px;".
- "vertical-align:top'>".
- $row->$field->dumpValue($html)."</td>";
+ if (isset($row->$field)) {
+ $result .= "<td style='border:solid 1px #000;padding:4px;".
+ "vertical-align:top'>".
+ $row->$field->dumpValue($format)."</td>";
+ } else {
+ $result .= "<td>&nbsp;</td>";
+ }
}
$result .= "</tr>";
}
@@ -188,7 +191,7 @@ class EasyRdf_Sparql_Result extends ArrayIterator
foreach ($this as $row) {
$textRow = array();
foreach ($row as $k => $v) {
- $textRow[$k] = $v->dumpValue(false);
+ $textRow[$k] = $v->dumpValue('text');
$width = strlen($textRow[$k]);
if ($colWidths[$k] < $width) {
$colWidths[$k] = $width;
@@ -224,7 +227,7 @@ class EasyRdf_Sparql_Result extends ArrayIterator
return $result;
} elseif ($this->type == 'boolean') {
$str = ($this->boolean ? 'true' : 'false');
- if ($html) {
+ if ($format == 'html') {
return "<p>Result: <span style='font-weight:bold'>$str</span></p>";
} else {
return "Result: $str";
@@ -375,7 +378,7 @@ class EasyRdf_Sparql_Result extends ArrayIterator
if ($this->type == 'boolean') {
return $this->boolean ? 'true' : 'false';
} else {
- return $this->dump(false);
+ return $this->dump('text');
}
}
}
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/TypeMapper.php b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/TypeMapper.php
index b2deaf0..81404d2 100644
--- a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/TypeMapper.php
+++ b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/TypeMapper.php
@@ -5,7 +5,7 @@
*
* LICENSE
*
- * Copyright (c) 2009-2010 Nicholas J Humfrey. All rights reserved.
+ * 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:
@@ -31,16 +31,15 @@
* POSSIBILITY OF SUCH DAMAGE.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2010 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
- * @version $Id$
*/
/**
* Class to map between RDF Types and PHP Classes
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2010 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
*/
class EasyRdf_TypeMapper
@@ -114,3 +113,13 @@ class EasyRdf_TypeMapper
}
}
}
+
+
+/*
+ Register default set of mapped types
+*/
+
+EasyRdf_TypeMapper::set('rdf:Alt', 'EasyRdf_Container');
+EasyRdf_TypeMapper::set('rdf:Bag', 'EasyRdf_Container');
+EasyRdf_TypeMapper::set('rdf:List', 'EasyRdf_Collection');
+EasyRdf_TypeMapper::set('rdf:Seq', 'EasyRdf_Container');
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Utils.php b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Utils.php
index a48686b..1c2d7dd 100644
--- a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Utils.php
+++ b/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Utils.php
@@ -5,7 +5,7 @@
*
* LICENSE
*
- * Copyright (c) 2009-2012 Nicholas J Humfrey. All rights reserved.
+ * 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:
@@ -31,9 +31,8 @@
* POSSIBILITY OF SUCH DAMAGE.
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2012 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
- * @version $Id$
*/
@@ -41,7 +40,7 @@
* Class containing static utility functions
*
* @package EasyRdf
- * @copyright Copyright (c) 2009-2010 Nicholas J Humfrey
+ * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
* @license http://www.opensource.org/licenses/bsd-license.php
*/
class EasyRdf_Utils
@@ -112,13 +111,19 @@ class EasyRdf_Utils
* EasyRdf_Graph and EasyRdf_Sparql_Result to format a resource
* for display.
*
- * @param mixed $resource An EasyRdf_Resource object or an associative array
- * @param bool $html Set to true to format the dump using HTML
- * @param string $color The colour of the text
+ * @param mixed $resource An EasyRdf_Resource object or an associative array
+ * @param string $format Either 'html' or 'text'
+ * @param string $color The colour of the text
* @return string
*/
- public static function dumpResourceValue($resource, $html = true, $color = 'blue')
+ public static function dumpResourceValue($resource, $format = 'html', $color = 'blue')
{
+ if (!preg_match('/^#?[-\w]+$/', $color)) {
+ throw new InvalidArgumentException(
+ "\$color must be a legal color code or name"
+ );
+ }
+
if (is_object($resource)) {
$resource = strval($resource);
} elseif (is_array($resource)) {
@@ -126,8 +131,8 @@ class EasyRdf_Utils
}
$short = EasyRdf_Namespace::shorten($resource);
- if ($html) {
- $escaped = htmlentities($resource);
+ if ($format == 'html') {
+ $escaped = htmlentities($resource, ENT_QUOTES);
if (substr($resource, 0, 2) == '_:') {
$href = '#' . $escaped;
} else {
@@ -153,15 +158,21 @@ class EasyRdf_Utils
* EasyRdf_Graph and EasyRdf_Sparql_Result to format a literal
* for display.
*
- * @param mixed $literal An EasyRdf_Literal object or an associative array
- * @param bool $html Set to true to format the dump using HTML
- * @param string $color The colour of the text
+ * @param mixed $literal An EasyRdf_Literal object or an associative array
+ * @param string $format Either 'html' or 'text'
+ * @param string $color The colour of the text
* @return string
*/
- public static function dumpLiteralValue($literal, $html = true, $color = 'black')
+ public static function dumpLiteralValue($literal, $format = 'html', $color = 'black')
{
+ if (!preg_match('/^#?[-\w]+$/', $color)) {
+ throw new InvalidArgumentException(
+ "\$color must be a legal color code or name"
+ );
+ }
+
if (is_object($literal)) {
- $literal = $literal->toArray();
+ $literal = $literal->toRdfPhp();
} elseif (!is_array($literal)) {
$literal = array('value' => $literal);
}
@@ -171,11 +182,15 @@ class EasyRdf_Utils
$text .= '@' . $literal['lang'];
}
if (isset($literal['datatype'])) {
- $datatype = EasyRdf_Namespace::shorten($literal['datatype']);
- $text .= "^^$datatype";
+ $short = EasyRdf_Namespace::shorten($literal['datatype']);
+ if ($short) {
+ $text .= "^^$short";
+ } else {
+ $text .= "^^<".$literal['datatype'].">";
+ }
}
- if ($html) {
+ if ($format == 'html') {
return "<span style='color:$color'>".
htmlentities($text, ENT_COMPAT, "UTF-8").
"</span>";
diff --git a/core/vendor/easyrdf/easyrdf/scripts/copyright_updater.php b/core/vendor/easyrdf/easyrdf/scripts/copyright_updater.php
new file mode 100644
index 0000000..557356b
--- /dev/null
+++ b/core/vendor/easyrdf/easyrdf/scripts/copyright_updater.php
@@ -0,0 +1,64 @@
+<?php
+
+$ROOT = realpath(__DIR__ . '/..');
+
+function process_file($path) {
+ $year = date('Y', filemtime($path));
+ $contents = file_get_contents($path);
+
+ $copy_statements = 0;
+ $output = '';
+ foreach (preg_split("/[\r\n]/", $contents) as $line) {
+ if (preg_match("/^(.+)Copyright\s+\(c\)\s+(\d+)-?(\d*) (Nicholas.+)$/", $line, $m)) {
+ $copy_statements++;
+
+ if ($m[2] != $year and $m[3] != $year) {
+ // Change the line
+ $line = "$m[1]Copyright (c) $m[2]-$year $m[4]";
+ }
+ }
+
+ // Remove trailing whitespace
+ $line = rtrim($line);
+ $output .= "$line\n";
+ }
+
+ // Remove surplus line endings
+ while (substr($output, -2) == "\n\n") {
+ $output = substr($output, 0, -1);
+ }
+
+ if ($copy_statements == 0) {
+ print "Warning: $path does not contain any copyright statements\n";
+ } else {
+ file_put_contents($path, $output);
+ }
+}
+
+
+function process_directory($path) {
+ $dir = opendir($path);
+
+ while ($file = readdir($dir)) {
+ if (substr($file, 0, 1) == '.') {
+ continue;
+ }
+
+ $filepath = $path . '/' . $file;
+ if (is_dir($filepath)) {
+ process_directory($filepath);
+ } elseif (is_file($filepath)) {
+ if (substr($file, -4) == '.php') {
+ process_file($filepath);
+ }
+ } else {
+ print "Unknown type: $filepath\n";
+ }
+ }
+
+ closedir($dir);
+}
+
+process_directory($ROOT . '/examples');
+process_directory($ROOT . '/lib');
+process_directory($ROOT . '/test');