- From: Roger L. Costello <costello@mitre.org>
- Date: Thu, 27 Mar 2003 10:48:27 -0500
- To: "Richard H. McCullough" <rhm@cdepot.net>
- CC: www-rdf-logic@w3.org
WOW! Most cool .... Thanks! /Roger "Richard H. McCullough" wrote: > For your enjoyment. > Here is a complete implementation of this example > using MKR/MKE (http://rhm.cdepot.net/) > > <HTML> > <XMP> > # KEHOME/knowledge/applications/SemanticWeb/OWL/RobberSpeeder.html > # Mar/27/2003 > > #=========# > # context # > #=========# > at view = Match Criminals; > > driversLicenseNumber, > registeredGun, > serial > isa InverseFunctionalProperty; > Person has > driversLicenseNumber = Literal, > registeredGun = Literal; > Gun has serial = Literal; > Gun License has > registeredGun = Literal, > holder = Person, > driversLicenseNumber = Literal; > > Gun License DB isa relation with > format = [registeredGun:1, Person:2, driversLicenseNumber:3], > meaning = { > $2 has registeredGun=$1; > $2 has driversLicenseNumber=$3; > }; > > Robbery Event DB isa relation with > format = [Date:1, Person:2, registeredGun:3], > meaning = { > at time = $1 { > $2 do rob done; > $2 has registeredGun = $3; > }; > }; > > Speeding Offense DB isa relation with > format = [Date:1, Person:2, driversLicenseNumber:3], > meaning = { > at time = $1 { > $2 do speed done; > $2 has driversLicenseNumber = $3; > }; > }; > > Match Robber and Speeder isa method with > label = [Gun License DB, Robbery Event DB, Speeding Offense DB], > format = [relation:1, relation:2, relation:3], > meaning = { > do load od $1, $2, $3 done; > every person isa Person { > set . = $person; > if $person isin $1; then > if $registeredGun isin $2; then > if $driversLicenseNumber isin $3; then > do print od "<!-- matching Robber and Speeder -->" > done; > do print od "Person: $person" > done; > do print od "registeredGun: $registeredGun" > done; > do print od "driversLicenseNumber: $driversLicenseNumber" > done; > fi; > fi; > fi; > }; # end every person > }; # end meaning > > #======# > # data # > #======# > begin relation Gun License DB; > ABCD, Fred Bloggs, ZXYZXY; > end relation Gun License DB; > > begin relation Robbery Event DB; > date_123, an unknown person, ABCD; > end relation Robbery Event DB; > > begin relation Speeding Offense DB; > date_456, John Doe, ZXYZXY; > end relation Speeding Offense DB; > > #=========# > # results # > #=========# > do print od "<!-- input data -->" done; > Person isc* ?; > Gun License DB isc* ?; > Robbery Event DB isc* ?; > Speeding Offense DB isc* ?; > > do print od "<!-- output results -->" done; > do Match Robber and Speeder > od Gun License DB, Robbery Event DB, Speeding Offense DB > done; > > ! deletecomment RobberSpeeder.out >RobberSpeeder.save done; > ! cat RobberSpeeder.save done; > > exit; > > </XMP> > </HTML> > > ----- Original Message ----- > From: "Roger L. Costello" <costello@mitre.org> > To: <www-rdf-logic@w3.org> > Sent: Monday, March 24, 2003 3:10 AM > Subject: Re: The Robber and the Speeder: an exciting inference > > > > > Outstanding!!! This is exactly the thing I was looking for - a simple > > example with compelling inferences. Thanks a lot Ian! /Roger > > > > Ian Davis wrote: > > > > > > On Monday, 17 March 2003 at 17:00, Roger L. Costello wrote: > > > > Does anyone have ideas on how to enhance my solution to use > > > > more of OWL's capabilities, and use more inferencing? > > > > > > Here's my take on it...it's not as exciting as C.H.I.P.S. though... > > > > > > First of all a robbery takes place. The robber drops his gun while > > > fleeing. A report is filed by the investigating officers: > > > > > > <RobberyEvent> > > > <date>...</date> > > > <description>...</description> > > > <evidence> > > > <Gun> > > > <serial>ABCD</serial> > > > </Gun> > > > </evidence> > > > <robber> > > > <Person /> <!-- an unknown person --> > > > </robber> > > > </RobberyEvent> > > > > > > Subsequently a car is pulled over for speeding. The traffic officer > > > files a report electronically while issuing a ticket: > > > > > > <SpeedingOffence> > > > <date>...</date> > > > <description>...</description> > > > <speeder> > > > <Person> > > > <name>John Doe</name> > > > <driversLicenseNumber>ZXYZXY</driversLicenseNumber> > > > </Person> > > > </speeder> > > > </SpeedingOffence> > > > > > > At police HQ, the computer analyses each report as it is filed. The > > > following OWL rule tells the computer that a driversLicenseNumber is > > > unique to a Person: > > > > > > <owl:InverseFunctionalProperty rdf:ID="driversLicenseNumber"> > > > <rdfs:domain rdf:resource="Person" /> > > > <rdfs:range rdf:resource="&rdf;Literal" /> > > > </owl:FunctionalProperty> > > > > > > The computer uses this information to look up any other records it has > > > about that person and finds a gun license: > > > > > > <GunLicense> > > > <registeredGun> > > > <Gun> > > > <serial>ABCD</serial> > > > </Gun> > > > </registeredGun> > > > <holder> > > > <Person> > > > <name>Fred Bloggs</name> > > > <driversLicenseNumber>ZXYZXY</driversLicenseNumber> > > > </Person> > > > </holder> > > > </GunLicense> > > > > > > The next OWL rule tells the computer that the registeredGun property > > > uniquely identifies a GunLicense. i.e. each gun is associated with > > > only a single GunLicense > > > > > > <owl:InverseFunctionalProperty rdf:ID="registeredGun"> > > > <rdfs:domain rdf:resource="GunLicense" /> > > > <rdfs:range rdf:resource="Gun" /> > > > </owl:FunctionalProperty> > > > > > > The computer now knows that the person stopped for speeding owns a > > > gun. The next rule tells the computer that each gun is uniquely > > > identified by its serial. > > > > > > <owl:InverseFunctionalProperty rdf:ID="serial"> > > > <rdfs:domain rdf:resource="Gun" /> > > > <rdfs:range rdf:resource="&rdf;Literal" /> > > > </owl:FunctionalProperty> > > > > > > The computer uses this to determine that the gun on the license is the > > > same gun used in the robbery. This final rule, seals the speeder's > > > fate. It tells the computer that each GunLicense applies to only one > > > gun and one person, so there is no doubt that the speeder is the person > > > who owns the gun: > > > > > > <owl:Class rdf:ID="GunLicense"> > > > <owl:intersectionOf rdf:parseType="Collection"> > > > <owl:Restriction> > > > <owl:onProperty rdf:resource="#registeredGun"/> > > > <owl:cardinality>1</owl:cardinality> > > > </owl:Restriction> > > > <owl:Restriction> > > > <owl:onProperty rdf:resource="#holder"/> > > > <owl:cardinality>1</owl:cardinality> > > > </owl:Restriction> > > > </owl:intersectionOf> > > > </Class> > > > > > > The computer reports back to the traffic cop who duly arrests the > > > speeder on suspicion of armed robbery. > > > > > > - Ian <iand@internetalchemy.org> > > > "The test of all knowledge is experiment." > >
Received on Thursday, 27 March 2003 10:47:41 UTC