首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >简单的RDF库没有返回正确的RDF值。

简单的RDF库没有返回正确的RDF值。
EN

Stack Overflow用户
提问于 2014-06-09 07:39:20
回答 1查看 1.6K关注 0票数 1

我有一个远程RDF文件,我想从那里获取一些数据。它位于远程服务器上,示例数据运行良好,但很快我就解析了我的文件--它开始给出错误。我正在使用简单的RDF库。

下面是他们提供的例子:

代码语言:javascript
复制
<?php
    set_include_path(get_include_path() . PATH_SEPARATOR . '../lib/');
    require_once "EasyRdf.php";
?>
<html>
<head>
  <title>Basic FOAF example</title>
</head>
<body>

<?php
  $foaf = EasyRdf_Graph::newAndLoad('http://njh.me/foaf.rdf');
  $me = $foaf->primaryTopic();
?>

<p>
  My name is: <?= $me->get('foaf:name') ?>
</p>

</body>
</html>

这里是我的例子,从哪里我得到了一个错误。

代码语言:javascript
复制
<?php
    set_include_path(get_include_path() . PATH_SEPARATOR . '../lib/');
    require_once "EasyRdf.php";
?>
<html>
<head>
  <title>Basic FOAF example</title>
</head>
<body>

<?php
  $foaf = EasyRdf_Graph::newAndLoad('http://gutenberg.readingroo.ms/cache/generated/4500/pg4500.rdf');
  $me = $foaf->primaryTopic();
?>

<p>
  My name is: <?= $me->get('dcterms:title') ?>
</p>

</body>
</html>

我正在收到的错误:

代码语言:javascript
复制
My name is: 
Fatal error: Call to a member function get() on a non-object in D:\xampp\htdocs\giftcardbooks\easyrdf\examples\basic.php on line 31

我的最终目标是从RDF文件中获取值。使用它的节点和子节点。请看一看,帮我脱身。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-09 09:48:16

文档还远未完成,很难找到与此主题相关的任何内容。要进一步理解,您所能做的就是深入了解代码,或者在这里问您的问题:https://groups.google.com/forum/#!forum/easyrdf

primaryTopic()方法永远不会起作用

根据图类primaryTopic()是这样做的:

代码语言:javascript
复制
        return $this->get(
            $resource,
            'foaf:primaryTopic|^foaf:isPrimaryTopicOf',
            'resource'
        );

这意味着它正在寻找一个与foaf:primaryTopic有某种关系的资源。您的get()调用返回null,因为您的RDF不包含类似的资源。

目前,这对我适用于您的RDF。

代码语言:javascript
复制
<html>
<head>
    <title>Basic FOAF example</title>
</head>
<body>

<?php
/** @var EasyRdf_Graph $graph */
$graph = EasyRdf_Graph::newAndLoad('http://gutenberg.readingroo.ms/cache/generated/4500/pg4500.rdf');

/** @var EasyRdf_Resource $book */
$book = $graph->resource('http://gutenberg.readingroo.ms/cache/generated/4500/ebooks/4500'); //returns the ebook resource

$title = $book->get('dcterms:title'); //returns a literal node
?>

<p>
    My name is: <?php echo $title; //calls the __toString() of the literal node
?>
</p>

</body>
</html>

获取$book的另一种方法

代码语言:javascript
复制
$book = current($graph->resources());

因为书是根节点,它将是图中的第一个资源.

我不认为有什么方法可以让这本书使用pgterms:ebook

这是因为EasyRdf不承认这是一种类型。我认为这是因为在任何地方都没有将它定义为rdfs:Class,而是使用它,但这只是猜测,以确保您必须检查代码。dcterms:title也不是一个类型,但它可以用作资源属性.

代码语言:javascript
复制
var_dump($graph->types($book))
->
array(1) {
  [0]=>
  NULL
}

解析为XML

使用XML解析器解析RDF文件要容易得多:

代码语言:javascript
复制
$dom = simplexml_load_file('http://gutenberg.readingroo.ms/cache/generated/4500/pg4500.rdf');
$title = (string) current($dom->xpath('//rdf:RDF/pgterms:ebook/dcterms:title'));
$name = (string) current($dom->xpath('//rdf:RDF/pgterms:ebook/dcterms:creator/pgterms:agent/pgterms:name'));
echo $title;
echo $name;

我认为EasyRdf或RDF文件中存在问题,但我无法找到使用EasyRdf获取名称的方法。dcterms:creatorrdf:type of pgterms:agent,但它没有其他属性,也没有代理.我找不出是什么问题。我检查了$graph->resources(),缺少的属性的值在生成的ID下面,这些ID似乎与$ebook没有任何联系。所以我想解析不太顺利。这可能是EasyRdf错误,也可能是RDF文件本身的问题。我会在讨论论坛上问这个问题,也许他们会给出一个答案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24115736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档