用于处理Hypercat目录的模块
项目描述
Hypercat.py
一个用于处理Hypercat 3.0目录的最小库。有关Hypercat的完整详细信息,请参阅:http://www.hypercat.io/standard.html
起源
此模块是对以下位置的Hypercat模块的简单打包:[链接](https://github.com/hypercatIoT/python-tools)
用例
服务器
创建一个空的Hypercat目录
可选,添加元数据来描述它
可选,向目录添加条目
条目可以是另一个目录或资源
将其作为JSON输出,可以是最小化或格式化的
查找目录层次结构中的特定部分
客户端
加载和验证Hypercat
示例 - Hypercat服务器
我们将创建一个包含2个条目的Hypercat目录
h / \ h2 r
用法
from hypercat import hypercat # Create a catalogue h = hypercat.hypercat("CatalogueContainingOneCatalogueAndOneResource") # Create a second catalogue, and add it as a child of the first h2 = hypercat.hypercat("ChildCatalogue") h.addItem(h2, "/child_cat") # Create a resource, and add it as another child of the first catalogue r = hypercat.resource("resource1", "application/vnd.hypercat.sensordata+json") h.addItem(r, "/resource") # Print the raw JSON of the catalogue, and then with human-friendly formatting print h.asJSON() print h.prettyprint()
这应该输出
{ "catalogue-metadata": [ { "rel": "urn:X-hypercat:rels:isContentType", "val": "application/vnd.hypercat.catalogue+json" }, { "rel": "urn:X-hypercat:rels:hasDescription:en", "val": "CatalogueContainingOneCatalogueAndOneResource" } ], "items": [ { "href": "/child_cat", "item-metadata": [ { "rel": "urn:X-hypercat:rels:isContentType", "val": "application/vnd.hypercat.catalogue+json" }, { "rel": "urn:X-hypercat:rels:hasDescription:en", "val": "ChildCatalogue" } ] }, { "href": "/resource", "item-metadata": [ { "rel": "urn:X-hypercat:rels:isContentType", "val": "application/vnd.hypercat.sensordata+json" }, { "rel": "urn:X-hypercat:rels:hasDescription:en", "val": "resource1" } ] } ] }
示例 - Hypercat客户端
用法
from hypercat import hypercat h = hypercat.loads(inString) # Read-in and validate Hypercat print "Metadata is ",h.metadata
此模块的工作方式
根据规范,每个目录都有一个(可读)描述和关于它的元数据列表。它还包含一个“条目”列表,每个条目都有一个HREF和关于它的元数据列表。条目可以是任何类型的资源,包括另一个目录。
因此,在概念上,目录可以有多个层次级别的层次结构(即目录可以包含目录,该目录又包含目录,依此类推)。目录不必仅仅是树,它们可以是图,包含循环等,并且此模块的客户端通常会希望一次性声明完整的目录结构,即在深度声明整个层次结构。
但根据规范,一次只能输出一级目录,也就是说,获取目录时会声明其子目录,但不会声明其孙目录(要查看孙目录,您需要获取子目录)
另一个复杂的问题是,当目录是父目录时与它是子目录时,属性声明的某些不对称性
为了处理这个问题,在这个模块中,我们为每个hypercat对象维护一个通用的基类。然后,在输出过程中,我们忽略孙目录,并根据需要修改属性。
许可协议
该软件采用MIT许可证发布。请参阅LICENSE.txt中的详细信息。
待办事项
4.3.3表示使用isContentType对items[]中的每个成员进行标记是可选的,但我们在这里将其视为强制性的。