Вопросы о SPARQL-запросах в WSO2 DSS
У меня вопрос по использованию запросов WSO2 DSS и SPARQL в Fedora Commons. В данный момент я запускаю WSO2 DSS со своего настольного компьютера и обращаюсь к нему как к сервису localhost. Моя конечная точка SPARQL - это удаленный сервер, на котором запущено приложение с открытым исходным кодом под названием Fedora Commons, для проверки запроса требуется базовая аутентификация, и он принимает входные данные через запросы GET или POST, причем содержимое запроса помещается в переменную "query". В этом примере мы скажем, что URL-адрес конечной точки, который я пытаюсь запросить, выглядит следующим образом:
http://fedoraAdmin:fedoraPW@fedora-server.yoyodyne.com:8080/fedora/risearch?lang=sparql
Запрос, который я пытаюсь выполнить, работает на тестовой странице службы запросов индекса ресурсов Fedora и выглядит следующим образом:
PREFIX fedora: <info:fedora/fedora-system:def/relations-external#>
SELECT ?pid
FROM <#ri>
WHERE {
?pid fedora:isMemberOfCollection <info:fedora/islandora:root>
}
В какой-то момент я хотел бы заменить идентификатор "islandora:root" параметром запроса, но в данный момент это не важно. Результат вышеприведенного запроса выглядит примерно так:
<sparql>
<head>
<variable name="pid"/>
</head>
<results>
<result>
<pid uri="info:fedora/islandora:sp_basic_image_collection"/>
</result>
<result>
<pid uri="info:fedora/islandora:sp_large_image_collection"/>
</result>
<result>
<pid uri="info:fedora/islandora:70"/>
</result>
<result>
<pid uri="info:fedora/rick:1"/>
</result>
<result>
<pid uri="info:fedora/islandora:419"/>
</result>
<result>
<pid uri="info:fedora/islandora:420"/>
</result>
</results>
</sparql>
Учитывая вышеописанную ситуацию и вывод данных, я создал службу данных в WSO2 DSS, которая выглядит следующим образом:
<data name="FedoraSPARQL">
<config id="FedoraDEVServer">
<property name="rdf_datasource">http://fedoraAdmin:fedoraPW@fedora-server.yoyodyne.com:8080/fedora/risearch?lang=sparql</property>
</config>
<query id="getMemberOfCollection" useConfig="FedoraDEVServer">
<sparql><![CDATA[PREFIX fedora: <info:fedora/fedora-system:def/relations-external#> SELECT ?pid FROM <#ri> WHERE {?pid fedora:isMemberOfCollection <info:fedora/islandora:root>}]]></sparql>
<result element="results" rowName="result">
<element column="pid" name="pid" xsdType="string"/>
</result>
<param name="targetPID" sqlType="STRING"/>
</query>
<operation name="getMemberOfCollection">
<description>Returns the collection objects under islandora:root</description>
<call-query href="getMemberOfCollection">
<with-param name="targetPID" query-param="targetPID"/>
</call-query>
</operation>
</data>
В настоящее время я наблюдаю 401 Unauthorized, вероятно, из-за либо опечатки или ошибки форматирования в строке подключения, либо из-за того, что WSO2 DSS не может подключиться к конечной точке SPARQL, требующей аутентификации. Мой вопрос здесь заключается в том, как мне заставить работать вышеуказанный источник данных, учитывая мои текущие настройки? Если я не могу получить аутентификацию при работе с DSS, у меня есть возможность полностью обойти аутентификацию, если WSO2 DSS работала с другого сервера. Предполагая, что это может работать, какие изменения мне нужно внести, чтобы использовать параметр запроса "targetPID" вместо используемой в настоящее время строки "islandora:root"?
1 ответ
Ах, я думаю, что вижу проблему с этим подходом. Вау, я совершенно не понял, что должна делать операция с источником данных RDF. Забавно, как много кофе делает вещи немного яснее.
При просмотре конфигурации "Изменить источник данных" я вижу, что имя свойства "rdf_datasource" в XML-файле конфигурации указано как "Расположение файла RDF" в мастере редактора источника данных. Это заставляет меня думать, что DSS не отправляет какой-либо запрос на сервер Fedora, как я надеялся, а выполняет запрос (локально) для уже существующего результата RDF, который он ожидает загрузить с сервера Fedora.
Я думаю, мне нужно реструктурировать это как источник веб-данных, чтобы получить ожидаемый результат.