RDF :: Redland ::模型如何添加标签<foaf :: nick> </foaf :: nick>

时间:2013-08-26 14:55:51

标签: perl rdf redland

我有一个从RDF / XML文档解析的RDF::Redland::Model加载,我想在其中添加标记<foaf::nick>。我该怎么办?

更新

到目前为止,这是我的代码:

my $st = RDF::Redland::Node->new_xml_literal("<foaf:nick>content</foaf:content>");
$self->{Model}->add_typed_literal_statement($st);
print $self->{Model}->to_string; 

它不起作用。我做错了什么?

1 个答案:

答案 0 :(得分:4)

RDF模型不包含标签(甚至是XML元素); RDF模型是subject predicate object形式的一组三元组。 foaf:nick是将foaf:Person与昵称相关联的属性。根据您问题的标题,听起来您想要做的是为模型添加三something foaf:nick somenick。在这种情况下,RDF::Redland::Model的文档表明您想要的是addadd_typed_literal_statement

  

添加SUBJECT PREDICATE OBJECT

     

使用添加新语句到模型   主题,预测和对象。这些可以是RDF :: Redland :: Node,   RDF :: Redland :: URI或perl URI对象。

     

add_typed_literal_statement SUBJECT PREDICATE STRING [XML_LANGUAGE [DATATYPE]]

     

向包含类型的模型添加新语句   带有(可选)XML语言的文字字符串对象STRING(xml:lang   属性)XML_LANGUAGE和(可选)数据类型URI DATATYPE。   XML_LANGUAGE或DATATYPE可以或两者都设置为undef。

在第一种情况下,您似乎需要创建一个RDF::Redland::Node来表示作为昵称的文字字符串。有a constructor采用字符串参数在第二种情况下,这可能更容易,你可以直接使用字符串。

修改

既然您已经发布了代码,那么特定的问题会变得更加清晰,尽管您仍然没有提到实际出现的问题。

my $st = RDF::Redland::Node->new_xml_literal("<foaf:nick>content</foaf:content>");
$self->{Model}->add_typed_literal_statement($st);

首先,如果我理解您要尝试做什么,那么您使用的XML内容格式不正确,因为开始和结束标记不匹配(nick不是{{ 1}})。更有问题的是,这不是RDF的工作方式。 RDF是一个面向图形的表示,其中基本概念是表单的声明

content

和RDF图或模型是这些中的一组。将每个语句视为从主体到对象的定向标记边缘,我们获得一个图形。 RDF模型可以以多种格式序列化,其中一种格式为RDF/XML,这也是您正在使用的格式。但是,正如我在this answer中指出的那样,RDF API的目的是让您使用RDF图的语句,而不关心图的特定序列化。

听起来你想要添加一个声明

subject predicate object

到图表中,对于某些您尚未识别的主题。根据我上面链接和引用的文档,$something foaf:nick "content" 需要三个参数,而不是一个,第三个参数应该是一个字符串。你的第二行应该是这样的:

add_typed_literal_statement

其中$self->{Model}->add_typed_literal_statement($subject,$foafNick,"content"); $subject是URI Nodes。例如,您可以这样做(未经测试):

$foafNick

添加三联

$subject = new RDF::Redland::URINode("https://stackoverflow.com/users/400371");
$foafNick = new RDF::Redland::URINode("http://xmlns.com/foaf/0.1/nick");
$self->{Model}->add_typed_literal_statement($subject,$foafNick,"Nikita");

到模特。