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')
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
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