我正在使用Jena编写描述在线帖子的rdf文件。根据我正在使用的sioc本体/命名空间,例如,有以下内容:
我在Jena中如何包含sioc:在文件中发布为
<sioc:Post rdf:about="http://example.com/vb/1035092">
而不是
<rdf:Description rdf:about="http://example.com/vb/1035092">
什么是最佳做法?
答案 0 :(得分:2)
到目前为止,这两个答案都很重要:
rdf:Description
元素,并且这些元素将包含rdf:type
元素以指示所描述元素的类型。但是,RDF / XML序列化格式定义了许多缩写,这些缩写可用于使图形的序列化更短,更易读,并且在某些情况下更像传统的XML文档。其他人提到使用类型作为元素名称只是一个这样的缩写,但我认为值得研究这一点的规范。此特定缩写在2.13 Typed Nodes:RDF图通常有来自主题的
rdf:type
谓词 节点。这些通常在图中称为类型节点,或 RDF / XML中的类型节点元素。 RDF / XML允许这个三元组 表达得更简洁。通过替换rdf:Description
节点 元素名称,其namespaced元素对应于类型关系值的RDF URI reference。当然,可能有 是多个rdf:type
谓词,但只有一个可以这样使用, 其他人必须保留为财产要素或财产属性。类型化的节点元素通常在内置的RDF / XML中使用 RDF vocabulary中的课程:
rdf:Seq
,rdf:Bag
,rdf:Alt
,rdf:Statement
,rdf:Property
和rdf:List
。例如,示例14中的RDF / XML可以如下所示编写 例15。
示例14:包含
rdf:type
的完整示例(example14.rdf输出example14.nt)<?xml version="1.0"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:ex="http://example.org/stuff/1.0/"> <rdf:Description rdf:about="http://example.org/thing"> <rdf:type rdf:resource="http://example.org/stuff/1.0/Document"/> <dc:title>A marvelous thing</dc:title> </rdf:Description> </rdf:RDF>
示例15:使用类型化节点元素替换
的完整示例rdf:type
(example15.rdf输出example15.nt)<?xml version="1.0"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:ex="http://example.org/stuff/1.0/"> <ex:Document rdf:about="http://example.org/thing"> <dc:title>A marvelous thing</dc:title> </ex:Document> </rdf:RDF>
如果您使用的是Jena,则可以对RDF / XML输出的格式化方式进行全面控制。这些选项记录在文档的Advanced RDF/XML Output部分中。但是,对于您想要的情况,只需在RDF/XML
与RDF/XML-ABBREV
中进行序列化即可完成您想要做的事情。例如,使用Jena命令行rdfcat
工具查看结果。这是我们的数据(在Turtle中):
# The actual namespace doesn't matter for this example.
@prefix sioc: <http://example.org/> .
<http://example.com/vb/1035092>
a sioc:Post ;
sioc:has_creator "someone" .
让我们将其转换为简单的RDF / XML:
$ rdfcat -out RDF/XML data.n3
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:sioc="http://example.org/" >
<rdf:Description rdf:about="http://example.com/vb/1035092">
<rdf:type rdf:resource="http://example.org/Post"/>
<sioc:has_creator>someone</sioc:has_creator>
</rdf:Description>
</rdf:RDF>
现在让我们将其转换为RDF / XML-ABBREV:
$ rdfcat -out RDF/XML-ABBREV data.n3
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:sioc="http://example.org/">
<sioc:Post rdf:about="http://example.com/vb/1035092">
<sioc:has_creator>someone</sioc:has_creator>
</sioc:Post>
</rdf:RDF>
在第一种情况下,您会看到包含rdf:Description
和rdf:type
子元素的sioc:has_creator
元素,但在第二种情况下,您会看到sioc:Post
元素只有{{1}子元素。
至于最佳做法,我不知道这真的很重要。 RDF / XML-ABBREV通常会更短,因此在传输,磁盘上的存储上会产生更少的网络开销,并且更容易阅读。但是,更简单的RDF / XML写入速度更快。在大多数图表中,这不会产生很大的不同,但生成RDF / XML-ABBREV可能非常昂贵,正如a recent thread on the Jena mailing list所讨论的那样。
答案 1 :(得分:1)
你真的不应该对数据的计算机可读输出看起来如何。 Jena生成有效的RDF,任何其他RDF解析器/框架都能够读取它并让你用它来做它。
您想要的样式格式无效,在您的示例中需要为rdf:ID,这意味着URI标识的内容是sioc:Post。在后一种情况下,这基本上只是关于该URI的东西的容器;你会看到一个单独的rdf:type triple来声明个人是一个sioc:Post。
但严重的是,要重新迭代,RDF输出看起来是不相关的。如果你想要以某种方式看待它,因为你要手动编辑,不要。去获取像Protege或TopBraid这样的工具并使用它。
答案 2 :(得分:1)
Jena有两个RDF / XML编写器。使用RDF/XML-ABBREV
获取更易读的格式。
正如迈克尔正确地说的那样,不要过于痴迷。解析器不关心。