- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
谁能解释一下 Boost 使用的 GraphML 格式?它包括其他 GraphML 作者不使用的间接级别。我包含了来自 2 个来源的 GraphML 输出,它们都来自相同的输入数据。我不明白为什么 Boost 似乎对“key[0-N]”关键字使用了额外的间接级别。非常感谢任何有说服力的解释。
我正在寻找一种方法来配置 Boost 以生成与 Java/Tinkerpop 生成的输出相似或相同的输出,如下面的第一个示例所示。我想消除“key[0-N]”间接寻址。
首先,这是在使用 TinkerPop 图形库的 Java 程序中产生的输出:
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.1/graphml.xsd">
<key id="UnitName" for="node" attr.name="UnitName" attr.type="string" />
<key id="id" for="node" attr.name="id" attr.type="int" />
<key id="labelV" for="node" attr.name="labelV" attr.type="string" />
<key id="EdgeName" for="edge" attr.name="EdgeName" attr.type="string" />
<key id="labelE" for="edge" attr.name="labelE" attr.type="string" />
<key id="length" for="edge" attr.name="length" attr.type="long" />
<key id="sourceport" for="edge" attr.name="sourceport" attr.type="string" />
<key id="targetport" for="edge" attr.name="targetport" attr.type="string" />
<graph id="G" edgedefault="directed">
<node id="n0">
<data key="labelV">vertex</data>
<data key="UnitName">Div:101</data>
<data key="id">101</data>
</node>
<node id="n1">
<data key="labelV">vertex</data>
<data key="UnitName">Blow:1</data>
<data key="id">1</data>
</node>
<node id="n2">
<data key="labelV">vertex</data>
<data key="UnitName">Div:201</data>
<data key="id">201</data>
</node>
<node id="n3">
<data key="labelV">vertex</data>
<data key="UnitName">Blow:2</data>
<data key="id">2</data>
</node>
<node id="n4">
<data key="labelV">vertex</data>
<data key="UnitName">Sta:10 Sta10</data>
<data key="id">10</data>
</node>
<node id="n5">
<data key="labelV">vertex</data>
<data key="UnitName">Sta:11 Sta11</data>
<data key="id">11</data>
</node>
<node id="n6">
<data key="labelV">vertex</data>
<data key="UnitName">IZ:1002</data>
<data key="id">1002</data>
</node>
<node id="n7">
<data key="labelV">vertex</data>
<data key="UnitName">Sta:20</data>
<data key="id">20</data>
</node>
<node id="n8">
<data key="labelV">vertex</data>
<data key="UnitName">Sta:21</data>
<data key="id">21</data>
</node>
<edge id="e0" source="n0" target="n4">
<data key="labelE">edge</data>
<data key="EdgeName">Edge from Div:101 to Sta:10 Sta10</data>
<data key="length">80</data>
<data key="sourceport">0</data>
<data key="targetport"></data>
</edge>
<edge id="e1" source="n0" target="n5">
<data key="labelE">edge</data>
<data key="EdgeName">Edge from Div:101 to Sta:11 Sta11</data>
<data key="length">80</data>
<data key="sourceport">1</data>
<data key="targetport"></data>
</edge>
<edge id="e2" source="n0" target="n6">
<data key="labelE">edge</data>
<data key="EdgeName">Edge from Div:101 to IZ:1002</data>
<data key="length">20</data>
<data key="sourceport">3</data>
<data key="targetport"></data>
</edge>
<edge id="e3" source="n1" target="n0">
<data key="labelE">edge</data>
<data key="EdgeName">Edge from Blow:1 to Div:101</data>
<data key="length">0</data>
<data key="sourceport"></data>
<data key="targetport"></data>
</edge>
<edge id="e4" source="n2" target="n7">
<data key="labelE">edge</data>
<data key="EdgeName">Edge from Div:201 to Sta:20</data>
<data key="length">80</data>
<data key="sourceport">0</data>
<data key="targetport"></data>
</edge>
<edge id="e5" source="n2" target="n8">
<data key="labelE">edge</data>
<data key="EdgeName">Edge from Div:201 to Sta:21</data>
<data key="length">80</data>
<data key="sourceport">1</data>
<data key="targetport"></data>
</edge>
<edge id="e6" source="n2" target="n6">
<data key="labelE">edge</data>
<data key="EdgeName">Edge from Div:201 to IZ:1002</data>
<data key="length">20</data>
<data key="sourceport">3</data>
<data key="targetport"></data>
</edge>
<edge id="e7" source="n3" target="n2">
<data key="labelE">edge</data>
<data key="EdgeName">Edge from Blow:2 to Div:201</data>
<data key="length">0</data>
<data key="sourceport"></data>
<data key="targetport"></data>
</edge>
</graph>
</graphml>
这是我使用 Boost Graph 库中的 C++ write_graphml() 函数时显示的相同数据:
<?xml version="1.0" encoding="UTF-8"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">
<key id="key0" for="edge" attr.name="EdgeName" attr.type="string" />
<key id="key1" for="node" attr.name="UnitName" attr.type="string" />
<key id="key2" for="node" attr.name="id" attr.type="int" />
<key id="key3" for="edge" attr.name="length" attr.type="long" />
<key id="key4" for="edge" attr.name="sourceport" attr.type="string" />
<key id="key5" for="edge" attr.name="targetport" attr.type="string" />
<graph id="G" edgedefault="directed" parse.nodeids="free" parse.edgeids="canonical" parse.order="nodesfirst">
<node id="n0">
<data key="key1">Div:101</data>
<data key="key2">101</data>
</node>
<node id="n1">
<data key="key1">Blow:1</data>
<data key="key2">1</data>
</node>
<node id="n2">
<data key="key1">Sta:20</data>
<data key="key2">20</data>
</node>
<node id="n3">
<data key="key1">Div:201</data>
<data key="key2">201</data>
</node>
<node id="n4">
<data key="key1">Sta:21</data>
<data key="key2">21</data>
</node>
<node id="n5">
<data key="key1">Zn:1====Zn:2:1002</data>
<data key="key2">1002</data>
</node>
<node id="n6">
<data key="key1">Sta:10 Sta10</data>
<data key="key2">10</data>
</node>
<node id="n7">
<data key="key1">Sta:11 Sta11</data>
<data key="key2">11</data>
</node>
<node id="n8">
<data key="key1">Blow:2</data>
<data key="key2">2</data>
</node>
<edge id="e0" source="n0" target="n6">
<data key="key0">Edge from Div:101 to Sta:10 Sta10</data>
<data key="key3">80</data>
<data key="key4">0</data>
<data key="key5"></data>
</edge>
<edge id="e1" source="n0" target="n7">
<data key="key0">Edge from Div:101 to Sta:11 Sta11</data>
<data key="key3">80</data>
<data key="key4">1</data>
<data key="key5"></data>
</edge>
<edge id="e2" source="n0" target="n5">
<data key="key0">Edge from Div:101 to Zn:1====Zn:2:1002</data>
<data key="key3">20</data>
<data key="key4">3</data>
<data key="key5"></data>
</edge>
<edge id="e3" source="n1" target="n0">
<data key="key0">Edge from Blow:1 to Div:101</data>
<data key="key3">0</data>
<data key="key4"></data>
<data key="key5"></data>
</edge>
<edge id="e4" source="n3" target="n2">
<data key="key0">Edge from Div:201 to Sta:20</data>
<data key="key3">80</data>
<data key="key4">0</data>
<data key="key5"></data>
</edge>
<edge id="e5" source="n3" target="n4">
<data key="key0">Edge from Div:201 to Sta:21</data>
<data key="key3">80</data>
<data key="key4">1</data>
<data key="key5"></data>
</edge>
<edge id="e6" source="n3" target="n5">
<data key="key0">Edge from Div:201 to Zn:1====Zn:2:1002</data>
<data key="key3">20</data>
<data key="key4">3</data>
<data key="key5"></data>
</edge>
<edge id="e7" source="n8" target="n3">
<data key="key0">Edge from Blow:2 to Div:201</data>
<data key="key3">0</data>
<data key="key4"></data>
<data key="key5"></data>
</edge>
</graph>
</graphml>
我们在两个应用程序之间存在冲突。 Boost 应用程序最初导出 GraphML。另一个应用程序使用 JanusGraph/Gremlin/Tinkerpop 加载 GraphML 作为输入并创建图形。尽管 GraphML 在语法上是正确的,但 JanusGraph/Tinkerpop 在读取 GraphML 时会抛出异常:
java.lang.IllegalArgumentException: Name cannot be in protected namespace: edge
at org.janusgraph.graphdb.types.system.SystemTypeManager.isNotSystemName(SystemTypeManager.java:72)
at org.janusgraph.graphdb.types.StandardRelationTypeMaker.name(StandardRelationTypeMaker.java:188)
at org.janusgraph.graphdb.types.StandardRelationTypeMaker.<init>(StandardRelationTypeMaker.java:57)
at org.janusgraph.graphdb.types.StandardEdgeLabelMaker.<init>(StandardEdgeLabelMaker.java:42)
at org.janusgraph.graphdb.transaction.StandardJanusGraphTx.makeEdgeLabel(StandardJanusGraphTx.java:980)
at org.janusgraph.graphdb.transaction.StandardJanusGraphTx.getOrCreateEdgeLabel(StandardJanusGraphTx.java:965)
at org.janusgraph.graphdb.vertices.AbstractVertex.addEdge(AbstractVertex.java:163)
at org.janusgraph.graphdb.vertices.AbstractVertex.addEdge(AbstractVertex.java:37)
at org.apache.tinkerpop.gremlin.structure.io.graphml.GraphMLReader.readGraph(GraphMLReader.java:191)
我发现我可以通过编辑 GraphML 并在 key0 上进行全局搜索/替换并将其替换为 labelE 来解决此问题。我不完全确定为什么会这样,显然我试图避免这一步,所以我们的第一个想法是让 Boost 将该字段导出为“labelE”而不是“key0”。
在相关说明中,如果我使用内存中的 Tinkergraph,Tinkerpop 可以很好地加载原始 GraphML。只有当我使用 JanusGraph 作为我的底层数据库时才会发生异常。
最佳答案
I am looking for a way to configure Boost to produce output that is similar or identical to the output that Java/Tinkerpop produces, as illustrated in the first example below. I would like to eliminate the 'key[0-N]' indirection.
你把自己弄糊涂了。 TinkerPop 输出具有完全相同的间接级别。唯一的区别是 TinkerPop 决定它知道节点和边缘数据键的 ID 是相同的。
读取 XML 的工具没有任何区别。
事实上,即使是以下内容也是等价的:
<graphml>
<key id="UnitName" for="node" attr.name="UnitName" attr.type="string" />
<key id="labelV" for="node" attr.name="labelV" attr.type="string" />
<graph id="G" edgedefault="directed">
<node id="n0">
<data key="labelV">vertex</data>
<data key="UnitName">Div:101</data>
</node>
<node id="n1">
<data key="labelV">vertex</data>
<data key="UnitName">Blow:1</data>
</node>
</graph>
</graphml>
没有区别:
<graphml>
<key id="labelV" for="node" attr.name="UnitName" attr.type="string" />
<key id="UnitName" for="node" attr.name="labelV" attr.type="string" />
<graph id="G" edgedefault="directed">
<node id="n0">
<data key="UnitName">vertex</data>
<data key="labelV">Div:101</data>
</node>
<node id="n1">
<data key="UnitName">vertex</data>
<data key="labelV">Blow:1</data>
</node>
</graph>
</graphml>
是的,人类阅读该 XML 会感到困惑,但人类不会阅读该 XML。
您真的必须问问自己,为什么这些被指定为不相关的细节对您来说很重要。很可能情况并非如此。
当然,如果读取 XML 的工具是根据错误的假设编写的(又名“有错误”),您可能会陷入困境。我建议先解决这个问题。
否则,您可以尝试破解 GraphML 编写器,使其不使用自动生成的 key ID。这不会太难,但确实会带来麻烦(例如,当边缘/节点属性之间有一个名称类时)。
关于c++ - Boost GraphML 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49740173/
我正在开发 cytoscape.js项目。我有一个 graphml 文件(一种用于表示图形的基于 XML 的文件格式),我需要将其显示在浏览器上。为此,我使用扩展库 cytoscape-graphml
Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。 想要改善这个问题吗?更新问题,以便将其作为on-topi
我正在尝试查看 .graphml file按照 this thread 中的建议在图表 yEd 编辑器中.但是我很难查看节点中的值。 当我打开 .graphml 文件时,它如图 1 所示。然后我单击L
我有一个 prefuse 应用程序,用于加载 GraphML 文件,其中节点具有“Color”字符串属性。即。 Green 我想允许指定一系列预定义颜色,并且不想强制创建 GraphML 的程
将 networkx 图转换为 graphml 时遇到以下问题(无法在此处发布所有代码,但这是要点)。 NetworkX版本为1.6.2 我有一个名为 G 的 networkx 有向图 G = nx.
我最近发现了一个 .graphml 文件,但不知道如何从命令行打开它。我是否需要安装一些东西才能从命令行在 ubuntu 中查看此类文件?我试过谷歌,但找不到与该主题相关的任何结果。 最佳答案 Gra
您好,我有一个简单的 graphML 文件,我想从 GraphML 中删除节点标记并将其保存在另一个 GraphML 文件中。 GraphML 大小为 3GB,下面给出的是示例。 输入文件:
谁能解释一下 Boost 使用的 GraphML 格式?它包括其他 GraphML 作者不使用的间接级别。我包含了来自 2 个来源的 GraphML 输出,它们都来自相同的输入数据。我不明白为什么 B
我对如何将图形导出为 svg 或 graphml 有点困惑。直到现在,forum.jgraph.com 上的 API、示例或线程都没有帮助我。 我需要将图表导出为 svg 和 graphml。我得到了
我是 python 的新手,我想导出一个图形(传输网络),它是我使用名为 OSMnx 的 python 包构建的。我无法将其导出为 graphml 文件以进一步分析网络。我附上了我使用的代码和我遇到的
我正在尝试将包含单个有向图的 GraphML 文件读入 Haskell Data.Graph 为了使用 Math.Combinatorics.Graph 运行分析模块。 但是,我找不到任何允许我读取
因此,我在我的一个脚本中切换 graphML 导入方法,但在清理导入的数据时遇到了问题。目前,graphML 数据如下所示: www.someURL.com Guy, This /dir
我正在使用 NetworkX 1.9.1。 我有一张图表,需要根据位置进行组织,然后导出为 graphml 格式。 我试过 this question 中的代码.它不起作用,这是我的例子 import
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
我正在尝试使用 Java 中的 XOM 编写一个 graphML 文档,但我无法弄清楚如何使所有 namespace 声明都正确。要拥有有效的 graphML,我需要有一个如下所示的根元素: 我已经
因此,如前所述,我正在尝试找到一种将 graphml 文件(或其他格式,如 xgmml、csv、edgelist)从 networkx 或 igraph(python 或 R)转换为 SBML 的方法
我有以下 GraphML 文件“mygraph.gml”,我想用一个简单的 python 脚本解析它: 这表示一个简单的图,有 2 个节点“node0”、“node1”和它们之间的边
早上好,我想在 gephi 中可视化一个 emoji graphml 文件,但是,当我导入它时,它一直显示黑点,如下所示: 我不确定发生了什么。我错过了什么吗?如果可以,请给我一些指导,我使用的是 W
什么是标准图形表示文件格式或最常用的一种? 我会说这三个之一: GraphSON GEXF GraphML 但如果有人能指出他们每个人的优点/缺点,那就太好了。 最佳答案 答案最终取决于您问题的规模以
当我尝试使用 JUNG 在文本文件中读取和写入图形时,我遇到了问题。情况如下:给定一个文件,其中包含多重图的坐标及其权重。 一个例子是: 6346 6728 5911 156 5 6
我是一名优秀的程序员,十分优秀!