为什么有些rdf文件不包含<rdf:description rdf:about =“...”>?</rdf:description>

时间:2013-08-13 08:28:14

标签: rdf semantic-web jena

我正在使用Jena编写描述在线帖子的rdf文件。根据我正在使用的sioc本体/命名空间,例如,有以下内容:

  • 分类:sioc:Post
  • 属性:sioc:has_creator

我在Jena中如何包含sioc:在文件中发布为

<sioc:Post rdf:about="http://example.com/vb/1035092"> 

而不是

<rdf:Description rdf:about="http://example.com/vb/1035092">

什么是最佳做法?

3 个答案:

答案 0 :(得分:2)

到目前为止,这两个答案都很重要:

  • 你不应该特别注意RDF图的特定序列化,因为有很多不同的序列化,你应该使用暴露的API来访问它们,而不是序列化。 (例如,请参阅我之前的一个答案中的Don't query RDF (or OWL) with XPath,以获取有关依赖于特定XML序列化的一些注释。)
  • 您看到的不同之处在于,最简单的RDF / XML序列化将使用大量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:Seqrdf:Bagrdf:Alt,   rdf:Statementrdf:Propertyrdf: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:typeexample15.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/XMLRDF/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:Descriptionrdf: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获取更易读的格式。

正如迈克尔正确地说的那样,不要过于痴迷。解析器不关心。