# $Id: SwishTest.ss,v 1.8 2003/12/18 20:46:24 graham Exp $ # # Swish script: test script # # --------+---------+---------+---------+---------+---------+---------+--------- @prefix rdf: . @prefix rdfs: . @prefix ex: . @prefix pv: . @prefix xsd: . @prefix xsd_integer: . @prefix rdfd: . @prefix rs_rdf: . @prefix rs_rdfs: . @prefix : . # Simple inference tests ex:VehicleRule :- { :PassengerVehicle a rdfd:GeneralRestriction ; rdfd:onProperties (:totalCapacity :seatedCapacity :standingCapacity) ; rdfd:constraint xsd_integer:sum . } ex:VehicleRule1 :- { :PassengerVehicle1 a rdfd:GeneralRestriction ; rdfd:onProperties (:totalCapacity :seatedCapacity :standingCapacity) ; rdfd:constraint xsd_integer:sum ; rdfd:maxCardinality "1"^^xsd:nonNegativeInteger . } @merge ( ex:VehicleRule ex:VehicleRule1 ) => ex:VehicleRules @write ex:VehicleRules ; Vehicle rules file @read ex:VehicleRuleFile @asserteq ex:VehicleRuleFile ex:VehicleRules ; Compare read and internal graphs ex:Test01Inp :- { _:a1 a :PassengerVehicle ; :seatedCapacity "30"^^xsd:integer ; :standingCapacity "20"^^xsd:integer . } ex:Test01Fwd :- { _:a1 :totalCapacity "50"^^xsd:integer . } ex:Test01Bwd0 :- { _:a1 a :PassengerVehicle . _:a1 :totalCapacity "50"^^xsd:integer . _:a1 :seatedCapacity "30"^^xsd:integer . } ex:Test01Bwd1 :- { _:a1 a :PassengerVehicle . _:a1 :totalCapacity "50"^^xsd:integer . _:a1 :standingCapacity "20"^^xsd:integer . } ex:Test01Bwd :- ( ex:Test01Bwd0 ex:Test01Bwd1 ) @constraints pv:rules :- ( ex:VehicleRule ex:VehicleRule1 ) | xsd:integer @fwdchain pv:rules :PassengerVehicle ex:Test01Inp => :t1f # @write :t1f ; Forward chain result :t1f @asserteq :t1f ex:Test01Fwd ; Forward chain test @bwdchain pv:rules :PassengerVehicle ex:Test01Inp <= :t1b # @write :t1b ; Backward chain result :t1b # @write ex:Test01Bwd ; Backward chain expected ex:Test01Bwd @asserteq :t1b ex:Test01Bwd ; Backward chain test @assertin ex:Test01Bwd0 :t1b ; Backward chain component test (0) @assertin ex:Test01Bwd1 :t1b ; Backward chain component test (1) # Proof test, using simple built-in RDF ruleset # # To prove: # ex:foo ex:prop "a" . # RDFS-entails # ex:foo ex:prop _:x . # _:x rdf:type rdfs:Resource . # ex:Input01 :- { ex:foo ex:prop "a" . } ex:Step01a :- { rdfs:Literal rdf:type rdfs:Class . } ex:Step01b :- { rdfs:Literal rdfs:subClassOf rdfs:Resource . } ex:Step01c :- { ex:foo ex:prop _:a . _:a rdf:_allocatedTo "a" . } ex:Step01d :- { _:a rdf:type rdfs:Literal . } ex:Step01e :- { _:a rdf:type rdfs:Resource . } ex:Result :- { ex:foo ex:prop _:a . _:a rdf:type rdfs:Resource . } @proof ex:Proof01 ( rs_rdf:rules rs_rdfs:rules ) @input ex:Input01 @step rs_rdfs:r3 ( rs_rdfs:a10 rs_rdfs:a39 ) => ex:Step01a @step rs_rdfs:r8 ( ex:Step01a ) => ex:Step01b @step rs_rdf:lg ( ex:Input01 ) => ex:Step01c @step rs_rdfs:r1 ( ex:Step01c ) => ex:Step01d @step rs_rdfs:r9 ( ex:Step01b ex:Step01d ) => ex:Step01e @step rs_rdf:se ( ex:Step01c ex:Step01e ) => ex:Result @result ex:Result #@fwdchain rs_rdfs:rules rs_rdfs:r9 ( ex:Step01b ex:Step01c ) => ex:Step01dd #@write ex:Step01b ; ex:Step01b #@write ex:Step01c ; ex:Step01c #@write ex:Step01dd ; Forward chain simple rule rs_rdfs:r9 # Simple deduction rule test ex:Rule01Ant :- { ?p ex:son ?o . } ex:Rule01Con :- { ?o a ex:Male ; ex:parent ?p . } ex:Rule02Ant :- { ?p ex:daughter ?o . } ex:Rule02Con :- { ?o a ex:Female ; ex:parent ?p . } ex:Rule03Ant :- { ?o1 a ex:Male ; ex:parent ?p . ?o2 a ex:Female ; ex:parent ?p . } ex:Rule03Con :- { ?o1 ex:sister ?o2 . ?o2 ex:brother ?o1 . } @rule ex:Rule01 :- ( ex:Rule01Ant ) => ex:Rule01Con @rule ex:Rule02 :- ( ex:Rule02Ant ) => ex:Rule02Con @rule ex:Rule03 :- ( ex:Rule03Ant ) => ex:Rule03Con @ruleset ex:rules :- () ; ( ex:Rule01 ex:Rule02 ex:Rule03 ) @proof ex:Proof02 ( ex:rules ) @input ex:inp :- { _:p ex:son ex:s ; ex:daughter ex:d . } @step ex:Rule01 ( ex:inp ) => ex:st1 :- { ex:s a ex:Male ; ex:parent _:a . } @step ex:Rule02 ( ex:inp ) => ex:st2 :- { ex:d a ex:Female ; ex:parent _:a . } @step ex:Rule03 ( ex:st1 ex:st2 ) => ex:res :- { ex:s ex:sister ex:d . ex:d ex:brother ex:s . } @result ex:res #ex:proof01inp :- { _:p ex:son ex:s ; ex:daughter ex:d . } #@fwdchain ex:rules ex:Rule01 ex:proof01inp => ex:rule01fwd #@write ex:rule01fwd ; Forward chain simple rule 01 #@fwdchain ex:rules ex:Rule02 ex:proof01inp => ex:rule02fwd #@write ex:rule02fwd ; Forward chain simple rule 02 #@fwdchain ex:rules ex:Rule03 (ex:rule01fwd ex:rule02fwd) => ex:rule03fwd #@write ex:rule03fwd ; Forward chain simple rule 03 # TODO: test rule with variable binding modifiers # Merge, I/O and compare tests ex:TestMerge :- { _:b1 a :PassengerVehicle . _:b1 :totalCapacity "50"^^xsd:integer . _:b1 :seatedCapacity "30"^^xsd:integer . _:b2 a :PassengerVehicle . _:b2 :totalCapacity "50"^^xsd:integer . _:b2 :standingCapacity "20"^^xsd:integer . } @merge ( ex:Test01Bwd0 ex:Test01Bwd1 ) => ex:tmout @asserteq ex:TestMerge ex:tmout ; Check merged graph @write ex:tmout ; Test graph merge and read/write @write ex:TestMerge ; Test graph merge and read/write @read ex:tmin @asserteq ex:TestMerge ex:tmin ; Check graph read back @compare ex:tmin ex:tmout # @compare ex:tmin ex:VehicleRule # $Log: SwishTest.ss,v $ # Revision 1.8 2003/12/18 20:46:24 graham # Added xsd:string module to capture equivalence of xsd:string # and plain literals without a language tag # # Revision 1.7 2003/12/11 19:11:07 graham # Script processor passes all initial tests. # # Revision 1.6 2003/12/10 14:43:00 graham # Backup. # # Revision 1.5 2003/12/10 03:48:58 graham # SwishScript nearly complete: BwdChain and PrrofCheck to do. # # Revision 1.4 2003/12/08 23:55:36 graham # Various enhancements to variable bindings and proof structure. # New module BuiltInMap coded and tested. # Script processor is yet to be completed. # # Revision 1.3 2003/12/05 02:31:32 graham # Script parsing complete. # Some Swish script functions run successfully. # Command execution to be completed. # # Revision 1.2 2003/12/04 02:53:28 graham # More changes to LookupMap functions. # SwishScript logic part complete, type-checks OK. # # Revision 1.1 2003/12/01 18:51:38 graham # Described syntax for Swish script. # Created Swish scripting test data. # Edited export/import lists in Swish main program modules. #