2016-10-21 5 views
1

Ich habe eine Frage bezüglich der Jena API.
Ich schrieb einige Regeln, die perfekt funktionieren, aber mit einer Sache habe ich immer noch ein Problem. Ich hoffe du kannst mir dabei helfen.
1) Vergleich zweier Integer
In meinen Regeln brauche ich einen Vergleich wie "GreaterThan". Ich habe lange danach gesucht, aber keine einzige Version hat funktioniert. Ich versuchte:
GreaterThan (? X,? Y) als Teil der Regel sowie den Namensraum swrlb: http://www.w3.org/2003/11/swrlb# mit seiner Funktion swrlb: GreaterEqual, aber beide nicht funktioniert.
Die Regel sieht aus wie folgt:
[r0: (x es: has_intensity ich?), GreaterThan -> (I, 2)? (X es:? Test "true")]
oder meine Alternative:
[r0: (? X es: has_intensität? I), (? I swrlb: Größer 2) -> (? X es: test "true")]Jena Reasoning und Rule Syntax

Antwort

1

Das Hauptproblem, das Sie wahrscheinlich erleben, ist, dass Sie Verwenden Sie kein bekanntes Built-in. Bei den Built-ins wird zwischen Groß- und Kleinschreibung unterschieden.

Wie owl-fb.rules in Jena zu sehen, dass Sie die eingebaute verwenden möchten, ist greaterThan, nicht GreaterThan. Ein Beispiel für eine Regel, die builtin (Fa owl-fb.rules) folgt:

[validationMaxN: (?v rb:validation on()), (?C rdfs:subClassOf max(?P, ?N)) greaterThan(?N, 1) (?P rdf:type owl:DatatypeProperty) -> 
    [max2b: (?X rb:violation error('too many values', 'Too many values on max-N property (prop, class)', ?P, ?C)) 
      <- (?X rdf:type ?C), countLiteralValues(?X, ?P, ?M), lessThan(?N, ?M) ] ] 

Ihre Regel Ausbeuten bearbeiten:

[r0: (?x es:has_intensity ?I), greaterThan(?I, 2) -> (?x es:test "true")]