为什么某些rdf文件不包含?

为什么某些rdf文件不包含?,rdf,semantic-web,jena,Rdf,Semantic Web,Jena,我正在使用Jena编写一个rdf文件来描述在线帖子。例如,根据我使用的sioc本体/名称空间,有以下内容: 类别:sioc:邮政 属性:sioc:has_创建者 在耶拿,我如何将sioc:Post作为 <sioc:Post rdf:about="http://example.com/vb/1035092"> 而不是 <rdf:Description rdf:about="http://example.com/vb/1035092"> 最好的做法是什么?您真的不应该被

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

类别:sioc:邮政 属性:sioc:has_创建者 在耶拿,我如何将sioc:Post作为

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

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

最好的做法是什么?

您真的不应该被计算机可读的数据输出挂起。Jena生成有效的RDF,任何其他RDF解析器/框架都将能够读入它并让您使用它

您想要的样式格式无效,在您的示例中需要是rdf:ID,这意味着URI标识的东西是sioc:Post。在后一种情况下,它基本上只是一个容器,用于存储有关该URI的内容;您将看到一个单独的rdf:type三元组来断言这个个体是一个sioc:Post


但说真的,重复一次,RDF输出的样子与此无关。如果你想让它看起来像一个特定的方式,因为你要手工编辑它,不要。去找一个像Protege或TopBraid这样的工具,并使用它。

你真的不应该被计算机可读的数据输出挂起。Jena生成有效的RDF,任何其他RDF解析器/框架都将能够读入它并让您使用它

您想要的样式格式无效,在您的示例中需要是rdf:ID,这意味着URI标识的东西是sioc:Post。在后一种情况下,它基本上只是一个容器,用于存储有关该URI的内容;您将看到一个单独的rdf:type三元组来断言这个个体是一个sioc:Post


但说真的,重复一次,RDF输出的样子与此无关。如果你想让它看起来像一个特定的方式,因为你要手工编辑它,不要。去找一个像Protege或TopBraid这样的工具并使用它。

Jena有两个RDF/XML编写器。用于获取更可读的格式


不过,正如迈克尔正确地说的那样,不要对此感到困扰。解析器不在乎。

Jena有两个RDF/XML编写器。用于获取更可读的格式


不过,正如迈克尔正确地说的那样,不要对此感到困扰。解析器不在乎。

到目前为止,这两个答案都很有道理:

您不应该太注意RDF图的特定序列化,因为有许多不同的序列化,您应该使用公开图的API而不是序列化来访问它们。例如,请参阅我前面的一个答案中有关依赖特定XML序列化的一些注释。 您看到的区别是,最简单的RDF/XML序列化将使用大量RDF:Description元素,这些元素将包含RDF:type元素来指示所描述元素的类型。但是,RDF/XML序列化格式定义了许多缩写,可用于使图形的序列化更简短、更可读,在某些情况下更像传统的XML文档。其他人提到,使用类型作为元素名只是其中一个缩写,但我认为在这一点上值得检查规范。该特定缩写的定义如下: RDF图中通常有来自主题的RDF:type谓词 节点。这些通常称为图中的类型化节点,或 RDF/XML中的类型化节点元素。RDF/XML允许使用此三元组 表达得更简洁。通过替换rdf:Description节点 元素名称,其命名空间元素对应于类型关系值的名称。当然有可能,, 可以有多个rdf:type谓词,但这样只能使用一个, 其他属性必须保留为属性元素或属性属性

类型化的节点元素通常在RDF/XML中与内置的 中的类:rdf:Seq、rdf:Bag、rdf:Alt、, rdf:语句、rdf:属性和rdf:列表

例如,示例14中的RDF/XML可以如中所示编写 例15

示例14:带有rdf:type输出的完整示例

奇妙的事 示例15:使用类型化节点元素替换rdf:type输出的完整示例

奇妙的事 如果使用Jena,您可以对RDF/XML输出的格式化方式进行广泛的控制。这些选项记录在文档部分中。但是,对于您想要的情况,只需在RDF/XML与RDF/XML-ABBREV之间进行序列化即可完成您想要做的事情。例如,使用Jena命令行rdfcat工具查看结果。以下是我们的海龟数据:

对于本例,实际名称空间并不重要。 @前缀sioc:。 a sioc:员额; sioc:你有人。 让我们将其转换为简单的RDF/XML:

$rdfcat-out RDF/XML data.n3 某人 现在让我们将其转换为RDF/XML -缩写:

$rdfcat-out RDF/XML-ABBREV data.n3 某人 在第一种情况下,您会看到一个rdf:Description元素带有rdf:type和sioc:has_creator子元素,但在第二种情况下,您会看到一个sioc:Post元素只有一个sioc:has_creator子元素


至于最佳实践,我不知道这是否真的重要。RDF/XML-ABBREV通常会稍微短一点,因此在传输、磁盘存储方面会产生较少的网络开销,并且更易于读取。不过,RDF/XML越简单,编写速度就越快。在大多数图形上,这不会产生很大的区别,但是生成RDF/XML-ABBREV可能会非常昂贵,正如前面讨论的那样。

到目前为止,这两个答案都很有意义:

您不应该太注意RDF图的特定序列化,因为有许多不同的序列化,您应该使用公开图的API而不是序列化来访问它们。例如,请参阅我前面的一个答案中有关依赖特定XML序列化的一些注释。 您看到的区别是,最简单的RDF/XML序列化将使用大量RDF:Description元素,这些元素将包含RDF:type元素来指示所描述元素的类型。但是,RDF/XML序列化格式定义了许多缩写,可用于使图形的序列化更简短、更可读,在某些情况下更像传统的XML文档。其他人提到,使用类型作为元素名只是其中一个缩写,但我认为在这一点上值得检查规范。该特定缩写的定义如下: RDF图中通常有来自主题的RDF:type谓词 节点。这些通常称为图中的类型化节点,或 RDF/XML中的类型化节点元素。RDF/XML允许使用此三元组 表达得更简洁。通过替换rdf:Description节点 元素名称,其命名空间元素对应于类型关系值的名称。当然有可能,, 可以有多个rdf:type谓词,但这样只能使用一个, 其他属性必须保留为属性元素或属性属性

类型化的节点元素通常在RDF/XML中与内置的 中的类:rdf:Seq、rdf:Bag、rdf:Alt、, rdf:语句、rdf:属性和rdf:列表

例如,示例14中的RDF/XML可以如中所示编写 例15

示例14:带有rdf:type输出的完整示例

奇妙的事 示例15:使用类型化节点元素替换rdf:type输出的完整示例

奇妙的事 如果使用Jena,您可以对RDF/XML输出的格式化方式进行广泛的控制。这些选项记录在文档部分中。但是,对于您想要的情况,只需在RDF/XML与RDF/XML-ABBREV之间进行序列化即可完成您想要做的事情。例如,使用Jena命令行rdfcat工具查看结果。以下是我们的海龟数据:

对于本例,实际名称空间并不重要。 @前缀sioc:。 a sioc:员额; sioc:你有人。 让我们将其转换为简单的RDF/XML:

$rdfcat-out RDF/XML data.n3 某人 现在让我们将其转换为RDF/XML-ABBREV:

$rdfcat-out RDF/XML-ABBREV data.n3 某人 在第一种情况下,您会看到rdf:Description元素带有rdf:type和sioc:has\u creator子元素,但在第二种情况下,您会看到sioc:Post元素只有sioc:has\u creator子元素

至于最佳实践,我不知道这是否真的重要。RDF/XML-ABBREV通常会稍微短一点,因此在传输、磁盘存储方面会产生较少的网络开销,并且更易于读取。不过,RDF/XML越简单,编写速度就越快。在大多数图形上,这不会造成很大的区别,但正如前面讨论的那样,生成RDF/XML-ABBREV可能非常昂贵