2016-07-04 25 views
1

Ich benutze TopBraid Composer Free Edition (TBC FE) Version 5.1.3. Ich baue SPIN-Regeln/CONSTRUCT-Abfragen. Ein Teil meiner Abfrage enthält eine FILTER-Anweisung mit mehreren ODER-Bedingungen. Ich gebe es in TBC FE wie folgt:Warum hat TopBraid Composer FE meine mehreren OR-Bedingungen in einem SPIN-Regelfilter neu gruppiert?

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)) 
) . 

Aber, wenn ich die SPIN Regel in TBC FE speichern, die ODER-Verknüpfung Bedingungen umgruppiert ein Satz von binären sein OR ist:

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)) 
) . 

Meine Frage ist: Warum die Umgruppierung? Ich habe andere SPARQL-Editoren und Endpunkte verwendet, die diese Umgruppierung nicht vorgenommen haben. Ich behaupte, dass dies meinen Code viel schwerer zu lesen macht (Kosten), also frage ich mich, was der Vorteil ist?

Auch, wenn das Umgruppieren nicht notwendig ist, gibt es eine Möglichkeit, es in TBC FE auszuschalten?

Danke.

PS: Ja, ich weiß, dass das Aufnehmen eines Teilstrings einer Literalfolge dumm erscheint. Ich mache es, um einen Fehler in Sesame zu vermeiden, der meine literalen Strings schneidet, wenn ich meine RDF-Datei lade, die ich von TBD FE in Sesame speichere. Der Fehler wurde gemeldet und wird behoben. Wenn es behoben ist, werde ich meine Sesame-Version aktualisieren und diese hässlichen Teilstrings entfernen.

Antwort

1

Es ist die Art und Weise Jena Druckabfragen, kein Aspekt der TBC FE. Bei einem binären Operator, der assoziativ bleibt, erzeugt der Parser den Ausdrucksbaum ((E1 op E2) op E3) und wird so gedruckt. Es ist einfach und sicher; Druckausdrücke haben keinen Vorrang.

Eine alternative Möglichkeit zu schreiben Ihre FILTER ist

?orgString IN (SUBSTR("AF X", 1, 4), SUBSTR("J X", 1, 4), ...) 

in dem Fall, dass jede Hilfe ist.

+0

Dank @AndyS. Die "IN" -Anweisung ist sauberer, also werde ich für diese Abfrage auf diese umstellen. –