Как запросить онтологию с ARC2?

Я работаю над семантическим веб-проектом (я новичок в этом вопросе) с этой онтологией искусства: http://spraakdata.gu.se/svedd/painting-ontology/painting.owl используя SPARQL и библиотеку PHP ARC2. Я использую следующий код. Это работает, но результаты не полны:

<?php

include_once("arc2/ARC2.php");

$config = array(
/* db */
'db_name' => 'ontologia',
'db_user' => 'root',
'db_pwd' => '',
/* store */
'store_name' => 'arc_tests',
/* stop after 100 errors */
'max_errors' => 100,
);
$store = ARC2::getStore($config);
if (!$store->isSetUp()) {
$store->setUp();
}

/* LOAD will call the Web reader, which will call the
format detector, which in turn triggers the inclusion of an
appropriate parser, etc. until the triples end up in the store. */
//$store->query('LOAD <http://localhost/ontologia/painting2.owl.xml>');$q = '
PREFIX painting: <http://spraakbanken.gu.se/rdf/owl/painting.owl#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

SELECT *
WHERE {
?subject painting:createdBy ?object;
rdfs:label ?title.

}';

$r = '';
$id = 0;
if ($rows = $store->query($q, 'rows')) {
/* display the results in an HTML table */
echo "<table border='1'>
<thead>
<th>#</th>
<th>(Subject)</th>
<th>title</th>

</thead>";

/* loop for each returned row */
foreach( $rows as $row ) {
print "<tr><td>".++$id. "</td>
<td>" . $row['subject']. "</td>".
"<td>" . $row['title']. "</td>";
}
echo "</table>" ;
}
else{
echo "No hay resultados";
}

//$rs = $store->query('...');
$p='';
if ($errs = $store->getErrors()) {
/* $errs contains errors from the store and any called
sub-component such as the query processor, parsers, or
the web reader */
foreach ($errs as $err) {
$p .= '<li>' . $err. '</li>';
}
echo $p;

}?>

В этом случае запрос ищет все тройки с предикатом «createBy».
Я получаю только два результата:

введите описание изображения здесь

но я могу видеть в онтологии, что есть много картин с предикатом noy только те. Однако у них нет свойства «label», например «Guernica»:

<owl:NamedIndividual rdf:about="http://spraakbanken.gu.se/rdf/owl/painting.owl#GuernicaObj">
<rdf:type rdf:resource="http://spraakbanken.gu.se/rdf/owl/painting.owl#Painting"/>
<rdf:type rdf:resource="http://spraakbanken.gu.se/rdf/owl/painting.owl#Reference"/>
<hasIntendedUse rdf:resource="http://spraakbanken.gu.se/rdf/owl/painting.owl#Attention"/>
<hasColor rdf:resource="http://spraakbanken.gu.se/rdf/owl/painting.owl#Black"/>
<hasColor rdf:resource="http://spraakbanken.gu.se/rdf/owl/painting.owl#Gray"/>
<hasCreationDate rdf:resource="http://spraakbanken.gu.se/rdf/owl/painting.owl#GuernicaCreationDate"/>
<hasDimension rdf:resource="http://spraakbanken.gu.se/rdf/owl/painting.owl#GuernicaHeight"/>
<hasRepresentation rdf:resource="http://spraakbanken.gu.se/rdf/owl/painting.owl#GuernicaJPG"/>
<hasTitle rdf:resource="http://spraakbanken.gu.se/rdf/owl/painting.owl#GuernicaTitle"/>
<displayedAt rdf:resource="http://spraakbanken.gu.se/rdf/owl/painting.owl#InternationalExposition"/>
<hasCurrentLocation rdf:resource="http://spraakbanken.gu.se/rdf/owl/painting.owl#MuseoReinaSofía"/>
<createdBy rdf:resource="http://spraakbanken.gu.se/rdf/owl/painting.owl#PabloPicasso"/>
<hasPaintType rdf:resource="http://spraakbanken.gu.se/rdf/owl/painting.owl#StandOil"/>
<hasColor rdf:resource="http://spraakbanken.gu.se/rdf/owl/painting.owl#White"/>
</owl:NamedIndividual>

Некоторые картины имеют определенные структуры и некоторые важные свойства (например, label или madeBy), а другие — нет, что затрудняет обработку. Как я могу искать такую ​​онтологию? Я делаю что-то неправильно?. Онтология плохо построена?

1

Решение

Поскольку некоторые ресурсы, соответствующие первому тройному шаблону, не имеют rdfs:label, ты можешь использовать OPTIONAL чтобы получить все результаты, независимо от того, была ли определена метка.

SELECT *
WHERE {
?subject painting:createdBy ?object .
OPTIONAL { ?subject rdfs:label ?title .}
}

Примечание о синтаксисе SPARQL. . означает конец тройного паттерна. ; означает, что объект из предыдущего тройного шаблона используется для создания тройного шаблона. Я не уверен, что ваш парсер SPARQL будет делать с ;.,

1

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

Других решений пока нет …

По вопросам рекламы [email protected]