RDF::Redland::Model 如何添加标签 <foaf::nick>



我加载了一个从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; 

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

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

添加主题预测对象

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

add_typed_literal_statement主题预测字符串[XML_LANGUAGE[DATATYPE]]

向包含类型化的带(可选)XML语言(XML:lang)的文字字符串对象string属性)XML_LANGUAGE和(可选)数据类型URI datatype。XML_LANGUAGE或DATATYPE中的一个或两个都可以设置为undef。

在第一种情况下,似乎需要创建一个RDF::Redland::Node来表示昵称的文本字符串。有一个构造函数接受字符串参数。在第二种情况下,可能更容易,您可以直接使用字符串。

编辑

现在您已经发布了代码,尽管您还没有提到实际出了什么问题,但特定的问题会变得更清楚。

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

首先,如果我理解您要做什么,那么您使用的XML内容格式不好,因为开头和结尾标记不匹配(nick不是content)。更麻烦的是,RDF并不是这样工作的。RDF是一种面向图的表示,其中的基本概念是形式的陈述

subject predicate object

RDF图或模型就是其中的一组。将每个语句视为从主体到对象的有向标记边,我们得到了一个图。RDF模型可以用多种格式序列化,其中一种是RDF/XML,它也是您正在使用的格式。然而,正如我在这个回答中指出的,RDFneneneba API的要点是让您使用RDF图的语句,而不关心图的特定序列化。

听起来你想添加一个声明

$something foaf:nick "content"

对于某些您尚未确定的主题,请将其添加到图表中。根据我在上面链接并引用的文档,add_typed_literal_statement接受三个参数,而不是一个,第三个参数应该是字符串。你的第二行应该看起来像:

$self->{Model}->add_typed_literal_statement($subject,$foafNick,"content");

其中CCD_ 10和CCD_。例如,您可能会这样做(未经测试):

$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");

添加三重

<https://stackoverflow.com/users/400371> foaf:nick "Nikita"

到模型。

相关内容

  • 没有找到相关文章

最新更新