可扩展视觉与查询

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

resulting 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

resulting 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

resulting 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

resulting prov_list.png

Jupyter集成

除了用于将prov-n文件转换为graphviz文件的cli之外,该项目还提供了一个单元格魔术来可视化jupyter noteboks中的出处。为此,必须加载ipython扩展并导入所需的prov-n扩展,如下所示:

$ pip install extensible_prov
0

然后,在要显示图形的单元格中使用%%provn单元格魔术。

jupyter笔记本示例

注意,它需要安装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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java中的标签是用来制作意大利面代码的吗?   如何经营一家公司。压缩后eclipse中的java文件?   Java将双精度四舍五入将截断零   java使用定制的standalonefull。带arquillian的xml   java如何从hbase列读取日期、时间和时间戳   java在返回规范<SomeEntity>(spring,jpa)中仅包含具有true boolean字段的实体   java Ui strucking Firebase Firestore删除数据?   遇到Java数组索引错误   java使用Stanford语法分析器获得句子的K最佳语法分析   TLSPackage后的java神秘字节   当使用MVC标记添加css、js时,找不到URI为Spring MVC的HTTP请求的javascript映射   Zuul预过滤器中的java修改请求正文不工作   java JFrame不显示面板内容   java如何使用Jasypt进行安全加密?   性能如何在Java中创建一组唯一值而不进行比较   scala在后续Java调用中保留会话以播放2.0的FakereRequest   匹配Java正则表达式方括号的正则表达式   java如何将JpaRepository结果转换为自定义DTO类