Ожидаемая оператором ошибка в запросах xpath в SwiProlog

Я пытаюсь использовать предикат xpath для извлечения части проанализированного XML-файла, но продолжаю получать синтаксическую ошибку: оператор ожидает специальных символов (например, «/» и «@») запроса xpath. КОГДА я заключаю запрос в одинарные кавычки, он терпит неудачу.

?- load_xml_file( 'books.xml', DOM ).
DOM = [element(book, [genre=romance], ['\n   Gone With The Wind\n']), element(book, [genre=thriller], ['\n   The Shining\n'])].

?- load_xml_file( 'books.xml', DOM ), xpath(DOM, //book(@genre=thriller), Book).
ERROR: Syntax error: Operator expected
ERROR: load_xml_file( 'books.xml', DOM ), xpath(DOM, //
ERROR: ** here **
ERROR: book(@genre=thriller), Book) . 

?- load_xml_file( 'books.xml', DOM ), xpath(DOM, '//book(@genre=thriller)', Book).
false.

Содержимое books.xml:

<?xml version="1.0"?>
<book genre="romance">
   Gone With The Wind
</book>
<book genre="thriller">
   The Shining
</book>

person Clark    schedule 14.03.2012    source источник
comment
Позвоните, пожалуйста, опубликуйте также books.xml?   -  person Chetter Hummin    schedule 14.03.2012
comment
Я пробовал '//book(@genre=thriller)', '//book'(@genre=thriller), '//book'('@genre'=thriller) и '//book'('@ жанр = триллер»). Ни один из них не возвращает false или ERROR.   -  person Clark    schedule 14.03.2012


Ответы (1)


Я думаю, вы пропустили декларацию

:- use_module (библиотека (xpath)).

person CapelliC    schedule 14.03.2012
comment
+1: это правильно; xpath.pl в библиотеке SWI-Prolog объявляет op(400, fx, //) среди других операторов XPath, таких как / и @, так что запись термина //book(...) на самом деле правильно интерпретируется как термин //(book(...)), который требуется для синтаксического анализа. Атомные xpaths, похоже, не обрабатываются. - person ; 15.03.2012
comment
@sharky: я часто использую xpath, и этот оператор вызывает чертовски небольшую ошибку в подсветке синтаксиса. Вероятно, в IDE есть какое-то состояние гонки... - person CapelliC; 15.03.2012