用于处理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[]中的每个成员进行标记是可选的,但我们在这里将其视为强制性的。