Почему TopBraid Composer FE перегруппировал мои условия множественного ИЛИ в фильтр правил SPIN?
Я использую TopBraid Composer Free Edition (TBC FE) версии 5.1.3. Я строю правила SPIN / запросы CONSTRUCT. Часть моего запроса имеет оператор FILTER с несколькими условиями OR. Я ввожу это в TBC FE следующим образом:
FILTER (
(?orgString = SUBSTR("AF X"^^xsd:string, 1, 4)) ||
(?orgString = SUBSTR("J X"^^xsd:string, 1, 4)) ||
(?orgString = SUBSTR("AR X"^^xsd:string, 1, 4)) ||
(?orgString = SUBSTR("N X"^^xsd:string, 1, 4)) ||
(?orgString = SUBSTR("NS X"^^xsd:string, 1, 4)) ||
(?orgString = SUBSTR("MC X"^^xsd:string, 1, 4))
) .
Но когда я сохраняю правило SPIN в TBC FE, оно объединяет условия OR в набор двоичных OR:
FILTER (
(((((?orgString = SUBSTR("AF X"^^xsd:string, 1, 4)) ||
(?orgString = SUBSTR("J X"^^xsd:string, 1, 4))) ||
(?orgString = SUBSTR("AR X"^^xsd:string, 1, 4))) ||
(?orgString = SUBSTR("N X"^^xsd:string, 1, 4))) ||
(?orgString = SUBSTR("NS X"^^xsd:string, 1, 4))) ||
(?orgString = SUBSTR("MC X"^^xsd:string, 1, 4))
) .
Мой вопрос: почему перегруппировка? Я использовал другие редакторы SPARQL и конечные точки, которые не делали эту перегруппировку. Я утверждаю, что это делает мой код намного труднее для чтения (стоимость), поэтому мне интересно, какова выгода?
Кроме того, если эта перегруппировка не требуется, есть ли способ отключить ее в TBC FE?
Благодарю.
PS: Да, я знаю, что взятие подстроки буквальной строки кажется глупым. Я делаю это, чтобы избежать ошибки в Сезаме, которая урезает мои буквальные строки, когда я загружаю свой файл RDF, который я сохраняю из TBD FE в Сезам. Ошибка сообщена и устраняется. Когда это будет исправлено, я обновлю свою версию Sesame и уберу эти уродливые подстроки.
1 ответ
Это способ печати запросов Йены, а не аспект TBC FE. Для бинарного оператора, который остается ассоциативным, парсер создает дерево выражений (( E1 op E2) op E3), и оно печатается так. Это просто и безопасно; печать выражений не учитывает приоритет.
Альтернативный способ написать свой FILTER
является
?orgString IN ( SUBSTR("AF X", 1, 4), SUBSTR("J X", 1, 4), ...)
в случае, если это поможет.