使用ARC2使PHP网页可以看到本体?在线发布?

时间:2017-05-24 07:21:35

标签: php sparql owl ontology protege

我有一些PHP代码,用于根据SPARQL查询的结果创建动态网页。它现在不能正常工作,我认为这是因为我的本体还没有在线发布。我该如何处理发布部分?

<html>
  <body>

     <?php
     include_once('semsol/ARC2.php'); /* ARC2 static class inclusion */ 


     $dbpconfig = array
     (
     "remote_store_endpoint" => "http://dbpedia.org/sparql",
     );

     $store = ARC2::getRemoteStore($dbpconfig); 

     if ($errs = $store->getErrors()) 
         {
           echo "<h1>getRemoteSotre error<h1>" ;
         }

         $query = '
                     PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
                     PREFIX owl: <http://www.w3.org/2002/07/owl#>
                     PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
                     PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
                     PREFIX uni: <http://www.semanticweb.org/admin/ontologies/2017/4/untitled-ontology-19#>
                     SELECT ?property ?subject ?prop ?object 
                     WHERE 
                     {
                     uni:Product ?property ?subject .
                     OPTIONAL {?subject ?prop ?object } 

                     }

                     ';


                     $rows = $store->query($query, 'rows'); /* execute the query */

                      if ($errs = $store->getErrors()) 
                      {
                         echo "Query errors" ;
                         print_r($errs);
                      }

          /* display the results in an HTML table */
          echo "<table border='1'>" ;
          foreach( $rows as $row ) 
          { 
            /* loop for each returned row */
            print "<tr><td>" .$row['l'] . "</td><td>" . $row['c']. "</td></tr>";
          }
          echo "</table>"

  ?>
  </body>
</html>

3 个答案:

答案 0 :(得分:2)

你还对此感兴趣吗?以下适用于我。我试图说明如何测试多部分系统的单个组件,而不仅仅是构建所有内容,测试最终产品,然后说&#34;它不会。工作&#34;

背景:我使用在 AWS 中运行的 Ubuntu 16 服务器。看来您可能有一些使用 Fuseki 作为后端的经验。通过少量修改,这些指令应适用于Ubuntu Linux以外的操作系统,在不同的物理或虚拟环境中运行,以及访问Fuseki以外的sparql端点。您可以在相同的服务器或两个不同的服务器上运行PHP脚本和Fuseki进程。

您的先决条件责任:正在运行的网络服务器&amp; php解释器。默认的Ubuntu apache2和php7软件包适用于我,只需极少或零额外配置。 You could follow instructions like these,跳过MySQL步骤。同一篇文章提供了配置防火墙的一些技巧。您负责确定适当的全球可访问性级别。

  • 下载(例如http://www-eu.apache.org/dist/jena/binaries/apache-jena-fuseki-2.6.0.tar.gz)并解压其中一个Fuseki 2档案文件
  • 如果您要前往access the Fuseki dataset manager remotely,请修改run/shiro.ini文件以启用相应的远程访问政策
  • 为了测试/概念验证,请进入Fuseki目录并启动Fuseki,如./fuseki-server --mem /default 不要关闭此终端会话!您需要打开另一个其他任务的会话。如果您希望流程和数据保持不变,则需要使用另一种启动Fuseki的方法。
  • 使用网络浏览器访问Fuseki页面,该页面的地址如下:http://server.domain:3030
  • 点击添加数据按钮并上传部分数据。我之前在我的本地文件系统上下载了pizza ontology pizza.owl,因此我点击了select files...按钮,导航到我的pizza.owl文件,点击打开,然后点击立即上传。如果您使用披萨本体,您应该会看到大约插入了1980个三元组。
  • 现在,在运行任何脚本之前,请在Fuseki Web界面中进行实际检查并运行查询。 (单击左上角的查询按钮选项卡。)

那里有什么配料,它们属于哪些类?

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX pizza: <http://www.co-ode.org/ontologies/pizza/pizza.owl#>

SELECT *
WHERE {
  ?recursiveTopping rdfs:subClassOf+ pizza:PizzaTopping .
  ?recursiveTopping rdfs:label ?toppingLabel .
  ?recursiveTopping rdfs:subClassOf ?immediateParent .
  filter(!isBlank(?immediateParent)) 
  filter( ?immediateParent != pizza:PizzaTopping )
}
order by ?immediateParent ?recursiveTopping

如果SPARQL查询在Fuseki Web界面中有效,则可以将其嵌入到php脚本/页面中。

  • 在您的网络服务器的根目录中创建一个新文件夹。我在Ubuntu上使用Apache httpd,所以/var/www/html。您可能需要以root身份执行此操作,如下所示:sudo mkdir /var/www/html/ARC2_pizza
  • cd进入新目录
  • 复制此消息底部的源代码
  • 告诉计算机您要将某些文本传递到文件中:cat > index.php然后粘贴剪贴板中的文本。所需的操作取决于您使用的界面。在Ubuntu终端中,使用Shift-Control-v。在putty中,单击鼠标右键。或者您可以使用像nano或gedit这样的文本编辑器来创建index.php ...请记住,/ var / www / html中的编辑文件通常需要root权限,除非您更改了目录的所有权或访问权限,您的网络服务器可能不会欣赏。

脚本尚未准备好运行!

您需要确保已安装ARC2库,脚本知道在哪里找到它,并且remote_store_endpoint参数设置为正确的地址。

安装ARC2的方法可能有多种。我使用了composer,而后者可以通过多种方式安装,包括apt-get

sudo apt-get install composer

或卷曲

sudo apt-get install curl
curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer

接着是

cd /var/www/html/ARC2_pizza composer require "semsol/arc2": "dev-master"

关于remote_store_endpoint:如果您在与Fuseki服务器相同的服务器上运行php脚本(就像我一样),您可以使用localhost。否则,请使用完全限定的公共IP地址或Fuseki服务器的名称。

根据您的具体情况定制脚本后,从命令行进行测试(而不是使用网络浏览器访问它。)

php /var/www/html/ARC2_pizza/index.php

结果看起来不太漂亮,但如果你仔细观察,你应该看到几个披萨配料的名称,用HTML表格标签分隔,如...<td><tr>...

如果可行,您最终可以从Web浏览器进行测试。如果您使用了类似我的设置,请将浏览器指向http://server.domain/ARC2_pizza

这样的地址

如果您在网络浏览器中没有看到披萨配料表,那么您的网络服务器或防火墙设置有问题,而不是Fuseki,查询,PHP和ARC2安装,或者剧本。

这是ARC2_pizza/index.php

的源代码

这是基于您的问题所基于的相同教程。不要忘记配置ARC2位置和端点地址

<html>
  <body>

     <?php

// customize your ARC2 location
     include_once("/var/www/html/phprdftest/arc2-master/ARC2.php");

     $dbpconfig = array
     (
// customize your endpoint address
     "remote_store_endpoint" => "http://localhost:3030/default/query",
     );

     $store = ARC2::getRemoteStore($dbpconfig); 

     if ($errs = $store->getErrors()) 
         {
           echo "<h1>getRemoteSotre error<h1>" ;
         }

         $query = '
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX pizza: <http://www.co-ode.org/ontologies/pizza/pizza.owl#>

SELECT *
WHERE {
  ?recursiveTopping rdfs:subClassOf+ pizza:PizzaTopping .
  ?recursiveTopping rdfs:label ?toppingLabel .
  ?recursiveTopping rdfs:subClassOf ?immediateParent .
  filter(!isBlank(?immediateParent)) 
  filter( ?immediateParent != pizza:PizzaTopping )
}
order by ?immediateParent ?recursiveTopping
                     ';


                     $rows = $store->query($query, 'rows'); /* execute the query */

                      if ($errs = $store->getErrors()) 
                      {
                         echo "Query errors" ;
                         print_r($errs);
                      }

          /* display the results in an HTML table */
          echo "<table border='1'>" ;
          foreach( $rows as $row ) 
          { 
            /* loop for each returned row */
            print "<tr><td>" .$row['recursiveTopping'] . "</td><td>" . 
              $row['toppingLabel']. "</td><td>" . 
              $row['immediateParent']. "</td></tr>";
          }
          echo "</table>"

  ?>
  </body>
</html>

答案 1 :(得分:0)

如果您正在使用Windows,那么您需要一个mysql备份,所以首先安装wamp服务器然后phpmyAdmin数据库然后在store查询命令add中设置配置 商店商店&gt;查询(&#39; http://localhost/filename.owl&#39;)。然后使用wamp服务器运行php文件。您将看到数据库中的rdf / xml值在执行之前忘记将ARC.php文件和文件添加到www文件夹中

答案 2 :(得分:-1)

<android.support.constraint.Barrier
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/barrier1"
    app:barrierDirection="bottom"
    app:constraint_referenced_ids="included_layout, multiline_textview" />

<TextView
    android:id="@+id/bottom_textview"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/barrier1"
    android:layout_width="0dp"
    android:layout_height="wrap_content" />