У меня есть некоторый 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>
Вы все еще заинтересованы в этом? Следующее работает для меня. Я попытался проиллюстрировать, как проверить отдельные компоненты системы из нескольких частей, вместо того, чтобы просто собрать все, протестировать конечный продукт, а затем сказать «Это не работает».
Фон: я использую Ubuntu 16 сервер работает в AWS. Похоже, что у вас может быть некоторый опыт фусеки в качестве бэкэнда. С небольшими изменениями эти инструкции должны быть применимы к операционным системам, отличным от Ubuntu Linux, работающим в разных физических или виртуальных средах, и для доступа к конечным точкам sparql, отличным от Fuseki. Вы можете запустить скрипт PHP и процесс Fuseki на тех же серверах или на двух разных серверах.
Ваши обязательные обязанности: рабочий веб-сервер & PHP переводчик. Пакеты Ubuntu apache2 и php7 по умолчанию работали для меня с минимальной или нулевой дополнительной конфигурацией. Вы можете следовать инструкциям, как эти, пропуская шаги MySQL. В этой же статье приведены некоторые советы по настройке брандмауэра. Вы несете ответственность за определение соответствующий уровень мировой доступности.
run/shiro.ini
файл для включения соответствующей политики удаленного доступа./fuseki-server --mem /default
Не закрывайте эту терминальную сессию! Вам нужно будет открыть еще один сеанс для дополнительных задач. Требуется другой метод запуска Fuseki, если вы хотите, чтобы процесс и данные сохранялись.http://server.domain:3030
pizza.owl
в моей локальной файловой системе, поэтому я нажал select files...
Кнопка, переместилась на мой pizza.owl
файл, нажмите открыть, а затем нажмите загрузить сейчас. Если вы используете онтологию пиццы, вы должны увидеть, что вставлено примерно 1980 троек.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
/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>
Если вы используете Windows, вам нужна резервная копия mysql, поэтому сначала установите wamp-сервер, затем базу данных phpmyAdmin, затем настройте конфигурацию в команде store query add
Store store-> query (‘Http: //localhost/filename.owl«). Затем запустите php-файл, используя wamp-сервер. вы увидите значения rdf / xml в базе данных. Не забудьте добавить файл ARC.php и ваши файлы в папку www перед выполнением
<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>