XQuery/图形化三元组
外观
< XQuery
RDF 验证服务 可用于绘制 RDF 图,但由于这将前缀名扩展为完整 URI,因此图表作为示例可能看起来不太易读。
此服务用于绘制简单的三元组图,其中每个三元组都在一个本地 XML 格式中定义,其中每个三元组都具有属性 subject、property 和 object。[需要将 RDF 转换为 N3 的 XQuery 函数]
主体和宾语被绘制为节点,三元组被绘制为带有属性作为标签的弧。如果主体或宾语包含 ':' 或以 'http://' 开头,则节点将显示为椭圆形。如果它以 '_' 开头,则它是一个空节点,并且显示一个未命名的圆圈;否则,假设节点是一个文字,并在方框中绘制。
[1]
- url : 以上面说明的 xml 格式中的三元组的 url
- dir : LR - 从左到右 (默认),TB - 从上到下 [Graphviz 中的 rankdir]
- title : 图表的标题 - 默认无
来自 RDF primer 第 11 页
<?xml version="1.0" encoding="UTF-8"?> <graph> <triple subject="exstaff:85740" property="exterms:address" object="exaddressid:87540"/> <triple subject="exaddressid:87540" property="exterms:street" object="1501 Grant Avenue"/> <triple subject="exaddressid:87540" property="exterms:city" object="Bedford"/> <triple subject="exaddressid:87540" property="exterms:state" object="Massachusetts"/> <triple subject="exaddressid:87540" property="exterms:postalcode" object="01730"/> </graph>
digraph { rankdir='LR' "exstaff:85740" [label="exstaff:85740" shape=ellipse]; "exaddressid:87540" [label="exaddressid:87540" shape=ellipse]; "1501 Grant Avenue" [label="1501 Grant Avenue" shape=box]; "Bedford" [label="Bedford" shape=box]; "Massachusetts" [label="Massachusetts" shape=box]; "01730" [label="01730" shape=box]; "exstaff:85740" -> "exaddressid:87540" [label="exterms:address"]; "exaddressid:87540" -> "1501 Grant Avenue" [label="exterms:street"]; "exaddressid:87540" -> "Bedford" [label="exterms:city"]; "exaddressid:87540" -> "Massachusetts" [label="exterms:state"]; "exaddressid:87540" -> "01730" [label="exterms:postalcode"]; }
GIF 图像
要么保存生成的 gif,要么使用 5clicks 或类似工具来捕获屏幕上的图像。打印大型 GIF 图像的一种方法是保存图像,然后将其插入到 Excel 电子表格中。Excel 会将图像打印在多个页面上。缩小尺寸并删除页面边框后,即使是大型图表也可以打印出来,然后粘贴在一起。
declare option exist:serialize "method=text media-type=text/text";
declare variable $nl := " ";
declare variable $url := request:get-parameter("url",());
declare variable $dir := request:get-parameter("dir","LR");
declare variable $title := request:get-parameter("title","");
let $graph := doc($url)
return (
"digraph ",$title, " { rankdir='" , $dir,"' ", $nl,
for $node in distinct-values(($graph//triple/@subject,$graph//triple/@object))
let $nodetype :=
if (contains($node,":") or starts-with ($node,"http://"))
then concat ('label="',$node,'" shape=ellipse')
else if (starts-with($node,"_"))
then 'shape=circle'
else concat ('label="',$node,'" shape=box')
return
concat ('"',$node,'" [',$nodetype,'];',$nl)
,
for $triple in $graph//triple
return
( concat ('"', $triple/@subject, '" -> "' , $triple/@object ,'" [label="',$triple/@property, '"];'), $nl)
,
"} ",$nl
)
此脚本可以通过使用中间 XML 结构和 XSLT 脚本转换为点来改进。