sparql — сделать онтологию видимой для веб-страницы PHP с использованием ARC2? Опубликовать онлайн?

У меня есть некоторый 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>

2

Решение

Вы все еще заинтересованы в этом? Следующее работает для меня. Я попытался проиллюстрировать, как проверить отдельные компоненты системы из нескольких частей, вместо того, чтобы просто собрать все, протестировать конечный продукт, а затем сказать «Это не работает».

Фон: я использую Ubuntu 16 сервер работает в AWS. Похоже, что у вас может быть некоторый опыт фусеки в качестве бэкэнда. С небольшими изменениями эти инструкции должны быть применимы к операционным системам, отличным от Ubuntu Linux, работающим в разных физических или виртуальных средах, и для доступа к конечным точкам sparql, отличным от Fuseki. Вы можете запустить скрипт PHP и процесс Fuseki на тех же серверах или на двух разных серверах.

Ваши обязательные обязанности: рабочий веб-сервер & PHP переводчик. Пакеты Ubuntu apache2 и php7 по умолчанию работали для меня с минимальной или нулевой дополнительной конфигурацией. Вы можете следовать инструкциям, как эти, пропуская шаги MySQL. В этой же статье приведены некоторые советы по настройке брандмауэра. Вы несете ответственность за определение соответствующий уровень мировой доступности.

  • Скачать (http://www-eu.apache.org/dist/jena/binaries/apache-jena-fuseki-2.6.0.tar.gz, например) и распакуйте один из архивных файлов Fuseki 2
  • Если вы собираетесь получить доступ к менеджеру набора данных Fuseki удаленно, редактировать run/shiro.ini файл для включения соответствующей политики удаленного доступа
  • Для тестирования / проверки концепции перейдите в каталог Fuseki и запустите Fuseki следующим образом. ./fuseki-server --mem /default Не закрывайте эту терминальную сессию! Вам нужно будет открыть еще один сеанс для дополнительных задач. Требуется другой метод запуска Fuseki, если вы хотите, чтобы процесс и данные сохранялись.
  • Используйте веб-браузер, чтобы посетить страницу Fuseki, которая будет находиться по адресу, подобному следующему: http://server.domain:3030
  • Нажмите на добавить данные кнопку и загрузить некоторые данные. Я ранее скачал онтология пиццы как pizza.owl в моей локальной файловой системе, поэтому я нажал select files... Кнопка, переместилась на мой pizza.owl файл, нажмите открыть, а затем нажмите загрузить сейчас. Если вы используете онтологию пиццы, вы должны увидеть, что вставлено примерно 1980 троек.
  • Теперь, прежде чем запускать какой-либо сценарий, выполните проверку реальности и выполните запрос в веб-интерфейсе Fuseki. (Нажмите запрос кнопка вкладка в левом верхнем углу.)

Какие есть начинки и к каким классам они относятся?

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, вы готовы встроить его в скрипт / страницу php.

  • создайте новую папку в корневом каталоге вашего веб-сервера. Я использую Apache httpd на Ubuntu, так что это /var/www/html, Вам может потребоваться сделать это как root, например так: sudo mkdir /var/www/html/ARC2_pizza
  • перейдите в новый каталог
  • скопировать исходный код снизу этого сообщения
  • скажите компьютеру, что вы хотите вставить какой-нибудь текст в файл: cat > index.php Затем вставьте текст из буфера обмена. Требуемое действие будет зависеть от интерфейса, который вы используете. В терминале Ubuntu используйте Shift-Control-v. В замазке кликни правой кнопкой мыши. Или вы можете использовать текстовый редактор, например, Nano или Gedit для создания index.php… просто помните, что для редактирования файлов в / var / www / html обычно требуются права суперпользователя, если только вы не изменили права доступа или права доступа к каталогу, что может быть неприемлемо для вашего веб-сервера.

Скрипт еще не готов к запуску!

Вы должны убедиться, что библиотека ARC2 установлена, что ваш скрипт знает, где ее найти, и что remote_store_endpoint Параметр установлен на правильный адрес.

Вероятно, есть несколько способов установки СМ2. я использовал композитор, которые в свою очередь могут быть установлены несколькими способами, включая 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: если вы запускаете скрипт php на том же сервере, что и сервер Fuseki (как я), вы можете использовать localhost, В противном случае используйте полностью определенный публичный IP-адрес или имя сервера Fuseki.

Как только сценарий настроен для ваших обстоятельств, проверить это из командной строки (в отличие от посещения его с помощью веб-браузера.)

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

Результаты не будут выглядеть красиво, но если вы посмотрите внимательно, вы должны увидеть названия нескольких ингредиентов пиццы, разделенных тегами таблицы HTML, такими как ...<td><tr>...

Если это сработало, вы можете, наконец, протестировать его из веб-браузера. Если вы использовали настройки, подобные моей, укажите в браузере адрес, подобный 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>
2

Другие решения

Если вы используете Windows, вам нужна резервная копия mysql, поэтому сначала установите wamp-сервер, затем базу данных phpmyAdmin, затем настройте конфигурацию в команде store query add
Store store-> query (‘Http: //localhost/filename.owl«). Затем запустите php-файл, используя wamp-сервер. вы увидите значения rdf / xml в базе данных. Не забудьте добавить файл ARC.php и ваши файлы в папку www перед выполнением

0

<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>
-1
По вопросам рекламы [email protected]