aboutsummaryrefslogtreecommitdiffstats
path: root/library/jsonld/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'library/jsonld/README.md')
-rw-r--r--library/jsonld/README.md193
1 files changed, 193 insertions, 0 deletions
diff --git a/library/jsonld/README.md b/library/jsonld/README.md
new file mode 100644
index 000000000..5853c94bf
--- /dev/null
+++ b/library/jsonld/README.md
@@ -0,0 +1,193 @@
+php-json-ld
+===========
+
+[![Build Status][travis-ci-png]][travis-ci-site]
+[travis-ci-png]: https://travis-ci.org/digitalbazaar/php-json-ld.png?branch=master
+[travis-ci-site]: https://travis-ci.org/digitalbazaar/php-json-ld
+
+Introduction
+------------
+
+This library is an implementation of the [JSON-LD][] specification in [PHP][].
+
+JSON, as specified in [RFC7159][], is a simple language for representing
+objects on the Web. Linked Data is a way of describing content across
+different documents or Web sites. Web resources are described using
+IRIs, and typically are dereferencable entities that may be used to find
+more information, creating a "Web of Knowledge". [JSON-LD][] is intended
+to be a simple publishing method for expressing not only Linked Data in
+JSON, but for adding semantics to existing JSON.
+
+JSON-LD is designed as a light-weight syntax that can be used to express
+Linked Data. It is primarily intended to be a way to express Linked Data
+in JavaScript and other Web-based programming environments. It is also
+useful when building interoperable Web Services and when storing Linked
+Data in JSON-based document storage engines. It is practical and
+designed to be as simple as possible, utilizing the large number of JSON
+parsers and existing code that is in use today. It is designed to be
+able to express key-value pairs, RDF data, [RDFa][] data,
+[Microformats][] data, and [Microdata][]. That is, it supports every
+major Web-based structured data model in use today.
+
+The syntax does not require many applications to change their JSON, but
+easily add meaning by adding context in a way that is either in-band or
+out-of-band. The syntax is designed to not disturb already deployed
+systems running on JSON, but provide a smooth migration path from JSON
+to JSON with added semantics. Finally, the format is intended to be fast
+to parse, fast to generate, stream-based and document-based processing
+compatible, and require a very small memory footprint in order to operate.
+
+## Quick Examples
+
+```php
+$doc = (object)array(
+ "http://schema.org/name" => "Manu Sporny",
+ "http://schema.org/url" => (object)array("@id" => "http://manu.sporny.org/"),
+ "http://schema.org/image" => (object)array("@id" => "http://manu.sporny.org/images/manu.png")
+);
+
+$context = (object)array(
+ "name" => "http://schema.org/name",
+ "homepage" => (object)array("@id" => "http://schema.org/url", "@type" => "@id"),
+ "image" => (object)array("@id" => "http://schema.org/image", "@type" => "@id")
+);
+
+// compact a document according to a particular context
+// see: http://json-ld.org/spec/latest/json-ld/#compacted-document-form
+$compacted = jsonld_compact($doc, $context);
+
+echo json_encode($compacted, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
+/* Output:
+{
+ "@context": {...},
+ "image": "http://manu.sporny.org/images/manu.png",
+ "homepage": "http://manu.sporny.org/",
+ "name": "Manu Sporny"
+}
+*/
+
+// compact using URLs
+jsonld_compact('http://example.org/doc', 'http://example.org/context');
+
+// expand a document, removing its context
+// see: http://json-ld.org/spec/latest/json-ld/#expanded-document-form
+$expanded = jsonld_expand($compacted) {
+echo json_encode($expanded, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
+/* Output:
+{
+ "http://schema.org/image": [{"@id": "http://manu.sporny.org/images/manu.png"}],
+ "http://schema.org/name": [{"@value": "Manu Sporny"}],
+ "http://schema.org/url": [{"@id": "http://manu.sporny.org/"}]
+}
+*/
+
+// expand using URLs
+jsonld_expand('http://example.org/doc');
+
+// flatten a document
+// see: http://json-ld.org/spec/latest/json-ld/#flattened-document-form
+$flattened = jsonld_flatten($doc);
+// all deep-level trees flattened to the top-level
+
+// frame a document
+// see: http://json-ld.org/spec/latest/json-ld-framing/#introduction
+$framed = jsonld_frame($doc, $frame);
+// document transformed into a particular tree structure per the given frame
+
+// normalize a document using the RDF Dataset Normalization Algorithm
+// (URDNA2015), see: http://json-ld.github.io/normalization/spec/
+$normalized = jsonld_normalize(
+ $doc, array('algorithm' => 'URDNA2015', 'format' => 'application/nquads'));
+// normalized is a string that is a canonical representation of the document
+// that can be used for hashing, comparison, etc.
+
+// force HTTPS-only context loading:
+// use built-in secure document loader
+jsonld_set_document_loader('jsonld_default_secure_document_loader');
+
+// set a default custom document loader
+jsonld_set_document_loader('my_custom_doc_loader');
+
+// a custom loader that demonstrates using a simple in-memory mock for
+// certain contexts before falling back to the default loader
+// note: if you want to set this loader as the new default, you'll need to
+// store the previous default in another variable first and access that inside
+// the loader
+global $mocks;
+$mocks = array('http://example.com/mycontext' => (object)array(
+ 'hombre' => 'http://schema.org/name'));
+function mock_load($url) {
+ global $jsonld_default_load_document, $mocks;
+ if(isset($mocks[$url])) {
+ // return a "RemoteDocument", it has these three properties:
+ return (object)array(
+ 'contextUrl' => null,
+ 'document' => $mocks[$url],
+ 'documentUrl' => $url);
+ }
+ // use default loader
+ return call_user_func($jsonld_default_load_document, $url);
+}
+
+// use the mock loader for just this call, witout modifying the default one
+$compacted = jsonld_compact($foo, 'http://example.com/mycontext', array(
+ 'documentLoader' => 'mock_load'));
+
+// a custom loader that uses a simplistic in-memory cache (no invalidation)
+global $cache;
+$cache = array();
+function cache_load($url) {
+ global $jsonld_default_load_document, $cache;
+ if(isset($cache[$url])) {
+ return $cache[$url];
+ }
+ // use default loader
+ $doc = call_user_func($jsonld_default_load_document, $url);
+ $cache[$url] = $doc;
+ return $doc;
+}
+
+// use the cache loader for just this call, witout modifying the default one
+$compacted = jsonld_compact($foo, 'http://schema.org', array(
+ 'documentLoader' => 'cache_load'));
+```
+
+Commercial Support
+------------------
+
+Commercial support for this library is available upon request from
+[Digital Bazaar][]: support@digitalbazaar.com
+
+Source
+------
+
+The source code for the PHP implementation of the JSON-LD API
+is available at:
+
+http://github.com/digitalbazaar/php-json-ld
+
+Tests
+-----
+
+This library includes a sample testing utility which may be used to verify
+that changes to the processor maintain the correct output.
+
+To run the sample tests you will need to get the test suite files by cloning
+the `json-ld.org` and `normalization` repositories hosted on GitHub:
+
+- https://github.com/json-ld/json-ld.org
+- https://github.com/json-ld/normalization
+
+Then run the PHPUnit test.php application and point it at the directories
+containing the tests:
+
+ phpunit --group json-ld.org test.php -d {PATH_TO_JSON_LD_ORG/test-suite}
+ phpunit --group normalization test.php -d {PATH_TO_NORMALIZATION/tests}
+
+[Digital Bazaar]: http://digitalbazaar.com/
+[JSON-LD]: http://json-ld.org/
+[Microdata]: http://www.w3.org/TR/microdata/
+[Microformats]: http://microformats.org/
+[PHP]: http://php.net
+[RDFa]: http://www.w3.org/TR/rdfa-core/
+[RFC7159]: http://tools.ietf.org/html/rfc7159