我加载了一个从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;
但它不起作用。我做错了什么?
something foaf:nick somenick
。在这种情况下,RDF::Redland::Model的文档表明您想要的是add
或add_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"
到模型。