作为一个全领域的知识图谱,首先,需要考虑每一个领域的实体属性都是有区别的,例如,人物类的实体有身高、体重这些属性,而公司机构类的实体就没有这些属性。其次,随着时间的推移,某些类型的实体还需要扩充新的属性等等。传统的关系型数据库在解决这些问题时,明显比较棘手。
经过一番选型,最后确定使用MongoDB作为存储知识实体的数据库。MongoDB基于文档存储,文档采用JSON格式。实体数据入库前需要转成JSON文档,并对文档格式进行校验。而针对JSON进行校验的方案就是JSON-Schema。
JSON-Schema入门:
http://spacetelescope.github.io/understanding-json-schema/
JSON-Schema js版本的校验工具:
https://github.com/ebdrup/json-schema-benchmark, #基准测试报告
https://github.com/epoberezkin/ajv 最终选这个
基于该工具,实现了一个在线版的json schema校验工具:
http://www.kgopen.com/json-validate
JSON-Schema python版本的校验工具:
https://github.com/Julian/jsonschema
JSON-Schema PHP版本校验:
https://github.com/geraintluff/jsv4-php
JSON-Schema编辑工具:
http://www.kgopen.com/json-schema-editor #表格型的编辑工具
http://jsonschema.net/#/ #根据一段json文件,生成json-schema
这两个工具思路不同,应用场景也不同。
其他:
- array 的 tuple validation 是否有必要?
是否用object代替array的tuple更合适些? - object的dependencies、pattern properties?