在 Protege 中使用 SWRL 创建新的 类 和个人

Creating New Classes and Individuals with SWRL in Protege

我一直在尝试编写 SWRL 规则来自动创建新实体并将它们分配给 类 和 Protege ontology 中的谓词。代码 here didn't result in creation of even one individual, neither did the example in the readme 有效。

为清楚起见,这是我正在努力制定的规则:

Person(?person) ^ hasSSN(?person, ?ssn) ^ swrlx:makeOWLThing(?patient, ?person) -> Patient(?patient) ^ hasPID(?patient, ?ssn)

在这个ontology中:

@prefix : <http://www.semanticweb.org/richard/ontologies/2018/7/untitled-ontology-48#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix xml: <http://www.w3.org/XML/1998/namespace> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@base <http://www.semanticweb.org/richard/ontologies/2018/7/untitled-ontology-48> .

<http://www.semanticweb.org/richard/ontologies/2018/7/untitled-ontology-48> rdf:type owl:Ontology .

#################################################################
#    Annotation properties
#################################################################

###  http://swrl.stanford.edu/ontologies/3.3/swrla.owl#isRuleEnabled
<http://swrl.stanford.edu/ontologies/3.3/swrla.owl#isRuleEnabled> rdf:type owl:AnnotationProperty .


#################################################################
#    Data properties
#################################################################

###  http://www.semanticweb.org/richard/ontologies/2018/7/untitled-ontology-48#hasPID
:hasPID rdf:type owl:DatatypeProperty .


###  http://www.semanticweb.org/richard/ontologies/2018/7/untitled-ontology-48#hasSSN
:hasSSN rdf:type owl:DatatypeProperty .


#################################################################
#    Classes
#################################################################

###  http://www.semanticweb.org/richard/ontologies/2018/7/untitled-ontology-48#Patient
:Patient rdf:type owl:Class .


###  http://www.semanticweb.org/richard/ontologies/2018/7/untitled-ontology-48#Person
:Person rdf:type owl:Class .


#################################################################
#    Individuals
#################################################################

###  http://www.semanticweb.org/richard/ontologies/2018/7/untitled-ontology-48#person1
:person1 rdf:type owl:NamedIndividual ,
                  :Person ;
         :hasSSN 1001 .


###  http://www.semanticweb.org/richard/ontologies/2018/7/untitled-ontology-48#person2
:person2 rdf:type owl:NamedIndividual ,
                  :Person ;
         :hasSSN 1002 .


###  http://www.semanticweb.org/richard/ontologies/2018/7/untitled-ontology-48#person3
:person3 rdf:type owl:NamedIndividual ,
                  :Person ;
         :hasSSN 1003 .


#################################################################
#    Rules
#################################################################

:person rdf:type <http://www.w3.org/2003/11/swrl#Variable> .

:ssn rdf:type <http://www.w3.org/2003/11/swrl#Variable> .

:patient rdf:type <http://www.w3.org/2003/11/swrl#Variable> .

[ <http://swrl.stanford.edu/ontologies/3.3/swrla.owl#isRuleEnabled> "true"^^xsd:boolean ;
   rdfs:comment "Patient For Every Person With PID Equal To SSN"^^xsd:string ;
   rdfs:label "PatientForEveryPersonWithPIDEqualToSSN"^^xsd:string ;
   rdf:type <http://www.w3.org/2003/11/swrl#Imp> ;
   <http://www.w3.org/2003/11/swrl#body> [ rdf:type <http://www.w3.org/2003/11/swrl#AtomList> ;
                                           rdf:first [ rdf:type <http://www.w3.org/2003/11/swrl#ClassAtom> ;
                                                       <http://www.w3.org/2003/11/swrl#classPredicate> :Person ;
                                                       <http://www.w3.org/2003/11/swrl#argument1> :person
                                                     ] ;
                                           rdf:rest [ rdf:type <http://www.w3.org/2003/11/swrl#AtomList> ;
                                                      rdf:first [ rdf:type <http://www.w3.org/2003/11/swrl#DatavaluedPropertyAtom> ;
                                                                  <http://www.w3.org/2003/11/swrl#propertyPredicate> :hasSSN ;
                                                                  <http://www.w3.org/2003/11/swrl#argument1> :person ;
                                                                  <http://www.w3.org/2003/11/swrl#argument2> :ssn
                                                                ] ;
                                                      rdf:rest [ rdf:type <http://www.w3.org/2003/11/swrl#AtomList> ;
                                                                 rdf:first [ rdf:type <http://www.w3.org/2003/11/swrl#BuiltinAtom> ;
                                                                             <http://www.w3.org/2003/11/swrl#builtin> <http://swrl.stanford.edu/ontologies/built-ins/3.3/swrlx.owl#makeOWLThing> ;
                                                                             <http://www.w3.org/2003/11/swrl#arguments> ( :patient
                                                                                                                          :person
                                                                                                                        )
                                                                           ] ;
                                                                 rdf:rest rdf:nil
                                                               ]
                                                    ]
                                         ] ;
   <http://www.w3.org/2003/11/swrl#head> [ rdf:type <http://www.w3.org/2003/11/swrl#AtomList> ;
                                           rdf:first [ rdf:type <http://www.w3.org/2003/11/swrl#ClassAtom> ;
                                                       <http://www.w3.org/2003/11/swrl#classPredicate> :Patient ;
                                                       <http://www.w3.org/2003/11/swrl#argument1> :patient
                                                     ] ;
                                           rdf:rest [ rdf:type <http://www.w3.org/2003/11/swrl#AtomList> ;
                                                      rdf:first [ rdf:type <http://www.w3.org/2003/11/swrl#DatavaluedPropertyAtom> ;
                                                                  <http://www.w3.org/2003/11/swrl#propertyPredicate> :hasPID ;
                                                                  <http://www.w3.org/2003/11/swrl#argument1> :patient ;
                                                                  <http://www.w3.org/2003/11/swrl#argument2> :ssn
                                                                ] ;
                                                      rdf:rest rdf:nil
                                                    ]
                                         ]
 ] .

###  Generated by the OWL API (version 4.2.8.20170104-2310) https://github.com/owlcs/owlapi

颗粒不支持 SWRLX:

 WARNING: Ignoring rule Rule([Person(?person), hasSSN(?person,?ssn), makeOWLThing([?patient, ?person])] => [Patient(?patient), hasPID(?patient,?ssn)]):
 No builtin for http://swrl.stanford.edu/ontologies/built-ins/3.3/swrlx.owl#makeOWLThing

但是,您可以使用 Drools 翻译。在 SWRLTab 上,按:

  1. OWL+SWRL -> Drools
  2. 运行 流口水
  3. 流口水 -> OWL

这是生成的(在 Turtle 语法中):

@prefix p1: <http://www.semanticweb.org/richard/ontologies/2018/7/untitled-ontology-48#> .
@prefix p2: <http://www.semanticweb.org/richard/ontologies/2018/7/untitled-ontology-48##> .

# ...

p2:d5d68a85_03f9_4a69_8c07_9f1a57ffe7aa rdf:type owl:NamedIndividual, p1:Patient ;
                                        p1:hasPID 1003 .

p2:c8c3_3ad6_4c49_b9f6_940f711e8d5f rdf:type owl:NamedIndividual, p1:Patient ;
                                    p1:hasPID 1002 .

p2:c2038_2adb_4d12_b3ee_326cc45ffa2b rdf:type owl:NamedIndividual, p1:Patient ;
                                     p1:hasPID 1001 .

请注意生成的 URI 中的双 ##