2014-10-24 3 views
1

Я пытаюсь запустить шаблоны с помощью SPIN API. Для простых шаблонов это работает хорошо, но у меня проблемы с шаблонами, которые включают FILTERs.Запуск шаблонов SPARQL/SPIN с использованием API-интерфейса TopBraid SPIN

Для целей проверки, я печатаю тела шаблоны, прежде чем запускать их и то, что я вижу, это не то, что я ожидал увидеть:

Template t = SPINModuleRegistry.get().getTemplate("TheTemplatesURI", myModel); 
System.out.printLn(t.getBody().toString()); 

Он печатает запрос, но и условие FILTER, который содержит 4 строки, выглядит так:

FILTER <http://spinrdf.org/sp#notExists>([]) . 

Из-за этого запрос терпит неудачу, когда я пытаюсь запустить его.

Есть ли у кого-нибудь идеи, как я могу получить полный spin:body с моей модели?

ответ

1

Теперь я использую обходное решение.

Проблема заключается в том, что SPIN API считывает только фильтра запросов правильно (т.е. полный), если я ставлю их в качестве

NOT EXISTS { 
    ?s ?p ?o . 
    ... 
} 

вместо

FILTER NOT EXISTS { 
    ?s ?p ?o . 
    ... 
} 

Если я вручную запустить шаблоны тот путь, SPARQL выдает исключение, потому что правильным способом является FILTER. Я сохранил все свои шаблоны как НЕ СУЩЕСТВУЮЩИЕ в Topbraid Composer и добавил бит FILTER через String.replace (...) после загрузки их через SPIN API. Это может быть уродливо, но, по крайней мере, оно работает.