Мой вопрос связан с правилами SWRL и на самом деле уже был задан другим пользователем (см. Ontology property definition in Protégé-OWL/SWRL). Тем не менее, после выполнения инструкций о том, как заставить его работать, мне не удалось.Присвоение значения собственности на основе правила SWRL (Protege 4.3 с помощью Pellet в качестве аргумента)
В моей онтологии мне приходится работать с некоторыми сложными временными фактами (связанными с временными интервалами и т. Д.), Поэтому я импортирую Time Ontology. Прежде чем решать реальную проблему, я рассматриваю простой пример, проверяя, как назначить значение для свойства данных на основе правила SWRL. Простой пример относится к классу Лицо. Также есть класс BirthYear (подкласс Мгновенный класс из онтологии времени). Свойство объекта bornInYear с областью Person и диапазоном года рождения относится к Person с годом его/ее рождения. Я хотел бы, чтобы вычислить возраст человека в текущем году, поэтому я формулирую это правило SWRL: (? Р)?
Человек ∧ bornInYear (? Р, год рождения) ∧ вычитания (возраст, 2014, ? birthYear) & rightarrow; возраст (? р,? возраст)
После создания особи класса Людей и утверждая, что его/ее год рождения имеет значение "1977"
, я ожидал бы Pellet подсчитать, что возраст этого человека является . Этого не происходит. Любая идея почему? Правильно ли правило SWRL? (Чтобы узнать, указано ли значение 37
в свойстве данных , возраст, я смотрю представление «Утверждения свойства» отдельного пользователя. Я также удостоверяюсь, что в настройках разумного пользователя установлен флажок «Атрибуты свойств объекта» "проверено) Мой пример онтология гласит:.
Prefix(SWRLexample:=<http://www.semanticweb.org/ontologies/2014/1/SWRLexample#>)
Prefix(xsd:=<http://www.w3.org/2001/XMLSchema#>)
Prefix(swrlb:=<http://www.w3.org/2003/11/swrlb#>)
Prefix(owl:=<http://www.w3.org/2002/07/owl#>)
Prefix(:=<http://www.semanticweb.org/ontologies/2014/1/untitled-ontology-101#>)
Prefix(time:=<http://www.w3.org/2006/time#>)
Prefix(xml:=<http://www.w3.org/XML/1998/namespace>)
Prefix(rdf:=<http://www.w3.org/1999/02/22-rdf-syntax-ns#>)
Prefix(swrl:=<http://www.w3.org/2003/11/swrl#>)
Prefix(rdfs:=<http://www.w3.org/2000/01/rdf-schema#>)
Ontology(<http://www.semanticweb.org/ontologies/2014/1/SWRLexample>
Import(<http://www.w3.org/2006/time>)
Declaration(Class(SWRLexample:BirthYear))
SubClassOf(SWRLexample:BirthYear time:Instant)
Declaration(Class(SWRLexample:Person))
Declaration(ObjectProperty(SWRLexample:bornInYear))
ObjectPropertyDomain(SWRLexample:bornInYear SWRLexample:Person)
ObjectPropertyRange(SWRLexample:bornInYear SWRLexample:BirthYear)
Declaration(DataProperty(SWRLexample:age))
AnnotationAssertion(rdfs:comment SWRLexample:age "Age of a person in years")
DataPropertyDomain(SWRLexample:age SWRLexample:Person)
DataPropertyRange(SWRLexample:age xsd:int)
Declaration(NamedIndividual(SWRLexample:birthYear1))
ClassAssertion(SWRLexample:BirthYear SWRLexample:birthYear1)
DataPropertyAssertion(time:year SWRLexample:birthYear1 "1977"^^xsd:gYear)
Declaration(NamedIndividual(SWRLexample:p1))
ClassAssertion(SWRLexample:Person SWRLexample:p1)
ObjectPropertyAssertion(SWRLexample:bornInYear SWRLexample:p1 SWRLexample:birthYear1)
DLSafeRule(Body(ClassAtom(SWRLexample:Person Variable(<urn:swrl#p>)) ObjectPropertyAtom(SWRLexample:bornInYear Variable(<urn:swrl#p>) Variable(<urn:swrl#birthYear>)) BuiltInAtom(swrlb:subtract Variable(<urn:swrl#age>) "2014"^^xsd:integer Variable(<urn:swrl#birthYear>)))Head(DataPropertyAtom(SWRLexample:age Variable(<urn:swrl#p>) Variable(<urn:swrl#age>))))
)
На самом деле, я только заметил, что Pellet производит следующее сообщение об ошибке: 11 февраля 2014 1:43:45 PM com.clarkparsia.pellet.rules.BindingGeneratorStrategyImp l createGenerator Warnung: IGNORI Правило ПРАВИЛЫ НЕТ ([Лицо (? P), bornInYear (? P,? BirthYear), вычесть ([? Age, "2014" ^^ целое,? BirthYear])] => [age (? P,? Age)]): Не удалось создать безопасный порядок ограничений для тела. Гранулят в 280 мс –