json(-ld)和irods avus之间的双向转换
irods-avu-json的Python项目详细描述
json(-ld)和irods avus之间的双向转换
基本原理
JSON是一种灵活且易于使用的格式,用于存储(嵌套)数据。同时 它可以保持人类可读性。因此,它是一种理想的方法 在irods中存储元数据。但是,irods使用属性、值、单位三元组。它的 最大的缺点是缺乏嵌套。
此脚本描述了一种将json转换为avu三元组并再次转换的方法。 (双向)。
设计目标
- JSON与lt;->;AVU之间的双射
- 即不限制属性中使用的字符
- 即能够保持数组中的顺序
- 精益JSON->;AVU转换。
- 不要在avus中不必要地分解json
- 保持json和avus中的属性-值对相同。因此,从irod中可以很容易地访问值
- 与现有的或附加的AVUS 兼容
- 兼容/了解JSON-LD
实施
unit is字段用于以下目的:
- 定义json根
- 父对象(默认为0)
- 对象类型(o、s、b、a、n、z、e)
- 数组索引
avus只允许字符串值。类型转换如下:
- s:string
- o:object(“o”+对象id)
- B:布尔值(“真”或“假”)
- n:number(float或int的字符串值)
- Z:空(“.”)
- E:空字符串(“.”)(特殊情况下,AVU不允许空值)
- A:空数组(“.”)
安装
克隆git存储库,或使用pip将模块仅安装到虚拟环境中:
pip install https://github.com/MaastrichtUniversity/irods_avu_json/archive/master.zip
示例输出
Source:
{
"k1": "v1",
"k2": {
"k3": "v2",
"k4": "v3"
},
"k5": [
"v4",
"v5"
],
"k6": [
{
"k7": "v6",
"k8": "v7"
}
]
}
AVUs:
A V U
k1 v1 root_0_s
k2 o1 root_0_o1
k3 v2 root_1_s
k4 v3 root_1_s
k5 v4 root_0_s#0
k5 v5 root_0_s#1
k6 o2 root_0_o2#0
k7 v6 root_2_s
k8 v7 root_2_s
JSON:
{
"k1": "v1",
"k2": {
"k3": "v2",
"k4": "v3"
},
"k5": [
"v4",
"v5"
],
"k6": [
{
"k7": "v6",
"k8": "v7"
}
]
}
开发助手
使用conversion.py
脚本进行简单的开发。与Python2和3兼容。
python conversion.py inputs/basic.json
测试
可以从test
目录运行测试。只有在Python3。
python3 -m unittest test.TestIrodsAvuJson
限制
在AVU侧
- 如果两个avu具有相同的属性和单位,但值不同,则只有最后一个avu在json中结束