Пользовательские правила Jena с использованием встроенных модулей

В настоящее время я возился с Йеной, пытаясь создать правила, чтобы добавить их к моему общему аргументу. Я создал следующее простое правило:

[rule1: (?x ?rdf:type ?y),(?y rdfs:subClassOf ?z)-> (?x rdfs:type ?z)]

Это отлично работает и срабатывает правильно, давая мне все, что я ожидаю. После того, как я сделал это, я хотел назначить временную метку для ?x, чтобы знать, когда будет сделан вывод, я хотел использовать Now выглядит следующим образом.

[rule1: (?x ?rdf:type ?y),(?y rdfs:subClassOf ?z),now(?x)-> (?x rdfs:type ?z)]

Это, к сожалению, не работает, оно не выдает ошибку, просто кажется, что оно не привязывает какое-либо значение времени к ?x, а также, кажется, препятствует правильному запуску правила, как в первом случае. Онтология, которую я использую, приведена ниже. Есть идеи?

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
         xmlns:owl="http://www.w3.org/2002/07/owl#">
  <owl:Class rdf:about="livingthing"></owl:Class>
  <owl:Class rdf:about="Human">
    <rdfs:subClassOf rdf:resource="livingthing"/>
  </owl:Class>
  <rdf:Description rdf:about="john">
    <rdf:type rdf:resource="Human"/>
  </rdf:Description>
</rdf:RDF>

person Colin    schedule 24.05.2013    source источник


Ответы (1)


Согласно javadoc, Now будет «привязывать первый аргумент к текущей дате и времени в текущей локали и часовом поясе». Я не пробовал использовать Now, но я ожидаю, что «текущая дата и время в текущей локали и часовом поясе» является своего рода литералом RDF (возможно, датой или датой и временем)? Литералы не могут быть субъектами троек в RDF. Для правила

[rule1: (?x ?rdf:type ?y),(?y rdfs:subClassOf ?z),now(?x) -> (?x rdfs:type ?z)]

чтобы соответствовать на графике, переменная ?x будет привязана к литералу даты, скажем, "2013-05-24" (но, как я уже упоминал, я точно не знаю, что выдаст Now), но не может быть никаких совпадений для (?x rdf:type ?y), потому что они будут иметь форма "2013-05-24" rdf:type ?y и не может быть троек такой формы. Это означает, что правило не может сработать.

Если вы хотите добавить временную метку к чему-либо, вам, вероятно, понадобится n-арное отношение, так что вы фактически представляете (или представляете в дополнение к ?x rdf:type ?z) отношение inferredSubclassRule(?super,?sub,?time ), которое может быть представлено в RDF пустым узлом подобно:

[] a :inferredSubclassRule ;
   :hasSuperClass ?super ;
   :hasSubClass ?sub ;
   :hasTimestamp ?time .
person Joshua Taylor    schedule 24.05.2013
comment
Спасибо, имеет смысл. n-арные отношения кажутся тем, что я ищу. - person Colin; 24.05.2013