digitalbazaar / json-ld
PHP中的JSON-LD处理器和API实现。
Requires
- php: >=5.3.0
- ext-json: *
This package is not auto-updated.
Last update: 2024-09-14 17:05:49 UTC
README
介绍
JSON,如RFC7159中所述,是一种在网络上表示对象的简单语言。链接数据是描述跨不同文档或网站内容的方法。网络资源使用IRIs进行描述,通常是可引用的实体,可以用来找到更多信息,形成一个“知识网”。JSON-LD旨在成为在JSON中表示链接数据的一种简单发布方法,并添加语义到现有的JSON中。
JSON-LD被设计成一种轻量级语法,可以用来表示链接数据。它主要旨在成为在JavaScript和其他基于Web的编程环境中表示链接数据的一种方式。它也适用于构建可互操作的Web服务和将链接数据存储在基于JSON的文档存储引擎中。它是实用的,设计得尽可能简单,利用了今天广泛使用的许多JSON解析器和现有代码。它旨在能够表示键值对、RDF数据、RDFa数据、Microformats数据以及Microdata数据。也就是说,它支持今天使用的所有主要的基于Web的结构化数据模型。
语法不需要许多应用程序更改它们的JSON,但可以通过添加上下文轻松地添加意义,这种方式可以是带内或带外的。语法设计为不影响已经部署在JSON上运行的系统,但提供从JSON到添加语义的JSON的平滑迁移路径。最后,该格式旨在快速解析、快速生成,基于流和基于文档的处理兼容,并且在操作时需要非常小的内存占用。
快速示例
$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'));
商业支持
通过Digital Bazaar可提供此库的商业支持:support@digitalbazaar.com
源码
JSON-LD API的PHP实现源代码可在以下位置获取:
http://github.com/digitalbazaar/php-json-ld
测试
此库包括一个示例测试实用工具,可用于验证对处理器的更改是否保持了正确的输出。
要运行示例测试,您需要通过克隆GitHub上托管的json-ld.org
和normalization
存储库来获取测试套件文件
然后运行PHPUnit test.php应用程序,并指向包含测试的目录
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}