可扩展视觉与查询
extensible-provn的Python项目详细描述
可扩展prov-n
此工具旨在提供一种使用自定义扩展可视化和查询prov-n的方法。它是从版本化的prov存储库中提取的。
安装
此工具支持Python3.6或更高版本。要安装,请运行:
$ pip install extensible_prov
基本可视化使用
此项目安装三个cli命令,将prov-n转换为graphviz dot文件:
prov n
:将普通prov-n转换为点。它生成一个类似于provtoolbox的图形prov dictionary
:将prov dictionary文件转换为点版本控制的prov
:将版本控制的prov文件转换为点
这三个命令有相同的接口。要将prov-n文件转换为点,只需运行:
$ provn --infile input.prov --outfile output.dot
这些命令还支持输入重定向:
echo "entity(e1)" | provn | dot -Tpng -o pipe.png
有关其他选项,请参见帮助:
$ versioned-prov -h
usage: versioned-prov [-h] [-i INFILE] [-o OUTFILE] [-x WIDTH] [-y HEIGHT]
[-r RANKDIR] [-s STYLE]
Convert PROV-N to GraphViz Dot
optional arguments:
-h, --help show this help message and exit
-i INFILE, --infile INFILE
Input PROV-N file
-o OUTFILE, --outfile OUTFILE
Output dot file
-x WIDTH, --width WIDTH
Graph width
-y HEIGHT, --height HEIGHT
Graph height
-r RANKDIR, --rankdir RANKDIR
Graph rankdir
-s STYLE, --style STYLE
Graph style
造型
这些命令支持自定义样式。它有四种主要的内置样式:
默认值
:突出显示特定于prov dictionary和版本prov的节点和边的默认样式nohighlight
:适用于普通prov、prov字典和版本控制prov的样式,但不突出显示任何内容black white
:黑白样式基于nohighlight
provtoolbox
:基于provtoolbox的样式。标签小于nohighlight
样式。
用法:
echo "entity(e1)" | provn -s blackwhite | dot -Tpng -o blackwhite.png
定义新样式
样式定义为带有导出变量和样式类的模块。此类使用样式
字典属性为每个元素类型定义单独的样式。
在本词典中,键表示受样式影响的prov-n语句或元素。在键的末尾使用*
将覆盖其他样式。它支持以下键:
标签
:适用于常规标签{statement}u label
:应用于语句标签{statement}{part}u label
:应用于部分语句标签箭头
:适用于常规箭头节点
:适用于常规节点{statement}
:应用于语句箭头或节点{statement}{part}
:应用于语句箭头的一部分点
:适用于一般点{statement}u点
:应用于语句点{statement}{part}u point
:应用于部分语句点属性
:适用于一般可选属性{statement}u attrs
:应用于语句可选属性属性箭头
:适用于常规可选属性箭头{statement}u attrs箭头
:应用于语句可选属性箭头after
:应用于其他样式之后的语句之后的箭头
:适用于其他样式之后的箭头后面的点
:适用于其他样式之后的点后面的节点
:应用于其他样式之后的节点attrs\u after
:应用于其他样式之后的可选属性
在这个字典中,值可以是一个带有点属性的字典,或者是一个接收语句和e属性作为参数并返回带有点属性的字典。
下面的模块介绍了一个输出黑白样式的相反颜色的样式示例:
fromextensible_provn.view.style.nohighlightimportNoHighlightStyleclassWhiteBlackStyle(NoHighlightStyle):def__init__(self):super(WhiteBlackStyle,self).__init__()self.style=self.join(self.style,{"entity":{"fillcolor":"#000000","fontcolor":"#FFFFFF","style":"filled"},"activity":{"fillcolor":"#000000","fontcolor":"#FFFFFF","shape":"polygon","sides":"4","style":"filled"},"agent":{"fillcolor":"#000000","fontcolor":"#FFFFFF","shape":"house","style":"filled"},"value":{"fillcolor":"#000000","fontcolor":"#FFFFFF","style":"filled"},"version":{"fillcolor":"#000000","fontcolor":"#FFFFFF","style":"filled"},})EXPORT=WhiteBlackStyle
用法:
echo "entity(e1)" | provn -s opposite_bw | dot -Tpng -o opposite_bw.png
其他可用作参考的样式,请访问:https://github.com/joaofelipe/extensible-provn/tree/master/extensible-provn/view/style" rel="nofollow">https://github.com/joaofelipe/extensible-provn/tree/master/extensible-provn/view/style
用视图扩展prov-n
此项目支持通过添加新语句或重写现有语句来添加更多选项来扩展prov-n。可以使用decorator view.dot.graph.prov执行此操作,如下所示:
"""PROV-N with entlist(lid; e1, e2, ..., en) statement that is equivalent to:entity(lid)entity(e1)hadMember(lid, e1)entity(e2)hadMember(lid, e2)...entity(en)hadMember(lid, en)"""fromextensible_provn.viewimportprovn# Use Plain PROV as basefromextensible_provn.view.dotimportgraph@graph.prov("entlist")defentlist(dot,*args,attrs=None,id_=None):lines=[dot.node(attrs,"entity",id_)]forentity_idinargs:lines.append(dot.node(attrs,"entity",entity_id))lines.append(dot.arrow2(attrs,"hadMember",id_,entity_id))return"\n".join(lines)if__name__=="__main__":graph.main()
注意:此代码对Python3有效。python 2需要进行一些更改。
graph.main()
将默认的cli添加到此扩展。
用法:
echo "entlist(lid; e1, e2, e3)" | python prov_list.py | dot -Tpng -o prov_list.png
Jupyter集成
除了用于将prov-n文件转换为graphviz文件的cli之外,该项目还提供了一个单元格魔术来可视化jupyter noteboks中的出处。为此,必须加载ipython扩展并导入所需的prov-n扩展,如下所示:
$ pip install extensible_prov
0
然后,在要显示图形的单元格中使用%%provn
单元格魔术。
注意,它需要安装graphviz。选项-e pdf
也可以从inkscape安装中受益。但是,如果未安装Inkscape,则使用Graphviz。
查询
除了可视化出处之外,我们还支持通过模式匹配查询prov-n文件。内置查询相当简单且不完整,但扩展它们类似于创建可视化扩展。
$ pip install extensible_prov
1
这段代码不需要放在单独的python文件中。它可以在笔记本中。
然后,要执行查询,必须将其加载到查询器中:
$ pip install extensible_prov
2
并执行模式匹配查询:
$ pip install extensible_prov
3
此查询获取与entlist共享实体id的所有实体,并打印它们的id、带有entlist元素的元组和entlist文本。
输出:
$ pip install extensible_prov
4
请注意,在查询中,我们为要提取并跨多个规则联接的元素定义变量(var
)。此外,对于要忽略的元素,我们使用空白
。
还要注意,查询函数签名基于@queryer.prov
装饰符的第二个参数。因此,entlist
查询只接受3个参数,而entlist
语句可能接受更多参数。
贡献
请随意参与此项目,并将请求、错误报告或问题作为问题提交。
要安装用于开发的项目,请在存储库的根目录下运行。
$ pip install extensible_prov
5