首先在python 中导入prov模块
可能你因为版本不对无法导入包
win+R输入cmd
pip install prov[dot]
我的这个显然是已经安装了的
注意:运行代码的时候把编译器调整为
代码实现
from prov.model import ProvDocument
d1=ProvDocument()
d1.add_namespace('now', 'http://www.provbook.org/nownews/')
d1.add_namespace('nowpeople', 'http://www.provbook.org/nownews/people/')
d1.add_namespace('bk', 'http://www.provbook.org/ns/#')
# 创建实体
e1 = d1.entity('now:employment-article-v1.html')
#创建代理
d1.agent('nowpeople:Bob')
# 把实体分给代理
d1.wasAttributedTo(e1,'nowpeople:BOb')
print(d1.get_provn())
输出结果如下,我们知道PROV模型是含有三个模块的,分别是entity,activity,agent,我们这里是创建一个为now的实体,然后将它转为为newpeople的代理。
from prov.model import ProvDocument
d1=ProvDocument()
d1.add_namespace('now', 'http://www.provbook.org/nownews/')
d1.add_namespace('nowpeople', 'http://www.provbook.org/nownews/people/')
d1.add_namespace('bk', 'http://www.provbook.org/ns/#')
# 创建实体
e1 = d1.entity('now:employment-article-v1.html')
#创建代理
d1.agent('nowpeople:Bob')
# 把实体分给代理
d1.wasAttributedTo(e1,'nowpeople:BOb')
#print(d1.get_provn())
# 我们创建一个新的实体govftp
d1.add_namespace('govftp', 'ftp://ftp.bls.gov/pub/special.requests/oes/')
d1.add_namespace('void', 'http://govftpvocab.deri.ie/void#')
# 'now:employment-article-v1.html' 被派生给数据集 govftp:oesm11st.zip
d1.entity('govftp:oesm11st.zip', {
'prov:label': 'employment-stats-2011', 'prov:type': 'void:Dataset'})
d1.wasDerivedFrom('now:employment-article-v1.html', 'govftp:oesm11st.zip')
print(d1.get_provn())
# 增加一个活动
d1.add_namespace('is', 'http://www.provbook.org/nownews/is/#')
d1.activity('is:writeArticle')
# 活动被govftp使用,被now继承
d1.used('is:writeArticle','govftp:oesmllst.zip')
d1.wasGeneratedBy('now:employment-article-v1.html','is:writeArticle')
print(d1.get_provn())
可视化
from prov.model import ProvDocument
from prov.dot import prov_to_dot
d1=ProvDocument()
d1.add_namespace('now', 'http://www.provbook.org/nownews/')
d1.add_namespace('nowpeople', 'http://www.provbook.org/nownews/people/')
d1.add_namespace('bk', 'http://www.provbook.org/ns/#')
# 创建实体
e1 = d1.entity('now:employment-article-v1.html')
#创建代理
d1.agent('nowpeople:Bob')
# 把实体分给代理
d1.wasAttributedTo(e1,'nowpeople:BOb')
#print(d1.get_provn())
# 我们创建一个新的实体govftp
d1.add_namespace('govftp', 'ftp://ftp.bls.gov/pub/special.requests/oes/')
d1.add_namespace('void', 'http://govftpvocab.deri.ie/void#')
# 'now:employment-article-v1.html' 被派生给数据集 govftp:oesm11st.zip
d1.entity('govftp:oesm11st.zip', {
'prov:label': 'employment-stats-2011', 'prov:type': 'void:Dataset'})
d1.wasDerivedFrom('now:employment-article-v1.html', 'govftp:oesm11st.zip')
#print(d1.get_provn())
# 增加一个活动
d1.add_namespace('is', 'http://www.provbook.org/nownews/is/#')
d1.activity('is:writeArticle')
# 活动被govftp使用,被now继承
d1.used('is:writeArticle','govftp:oesmllst.zip')
d1.wasGeneratedBy('now:employment-article-v1.html','is:writeArticle')
#print(d1.get_provn())
dot=prov_to_dot(d1)
#python现在的路径下多了一张图片,打开这张图片,如下图
dot.write_png('article-prov.png')
# 保存为PDF格式
dot.write_pdf('article-prov.pdf')
转为json 格式
print(d1.serialize(indent=2))
其中indent的值我试着换成1,3打印结果都是相同的
打印结果如下
{
“prefix”: {
“now”: “http://www.provbook.org/nownews/”,
“nowpeople”: “http://www.provbook.org/nownews/people/”,
“bk”: “http://www.provbook.org/ns/#”,
“govftp”: “ftp://ftp.bls.gov/pub/special.requests/oes/”,
“void”: “http://govftpvocab.deri.ie/void#”,
“is”: “http://www.provbook.org/nownews/is/#”
},
“entity”: {
“now:employment-article-v1.html”: {},
“govftp:oesm11st.zip”: {
“prov:label”: “employment-stats-2011”,
“prov:type”: “void:Dataset”
}
},
“agent”: {
“nowpeople:Bob”: {}
},
“wasAttributedTo”: {
“:id1″: {
“prov:entity”: “now:employment-article-v1.html”,
“prov:agent”: “nowpeople:BOb”
}
},
“wasDerivedFrom”: {
“:id2”: {
“prov:generatedEntity”: “now:employment-article-v1.html”,
“prov:usedEntity”: “govftp:oesm11st.zip”
}
}, “activity”: {
“is:writeArticle”: {}
},
“used”: {
“:id3″: {
“prov:activity”: “is:writeArticle”,
“prov:entity”: “govftp:oesmllst.zip”
}
},
“wasGeneratedBy”: {
“:id4”: {
“prov:entity”: “now:employment-article-v1.html”,
“prov:activity”: “is:writeArticle”
}
}
}
Process finished with exit code 0
将文档上传到provestore
注册一个provestore账号
from provstore.api import Api
api=Api(username=‘hhh’,api_key=‘e099ae5baf987768550192d50fc1cab1f2b2fbcf’)
stored_document = api.document.create(d1,name=“name”,public=False)
报错
方法和步骤都是参考官方文档来的,provestore是个外网,所以访问时间超时也是很正常的。
参考
https://github.com/trungdong/notebooks
今天的文章python如何使用PROV数据溯源模型(含python代码)「建议收藏」分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/86229.html