SWRL Sample Rules
SWRL Sample Rules
1. Add
swrlb:add(4, 2, 2) → sqwrl:select("Yes - 2+2 equals 4!")
2. AllAdults
Adult(?p) → sqwrl:select(?p)
3. AllOWLClasses
tbox:isOWLClass(?c) → sqwrl:select(?c)
4. AllOWLObjectProperties
tbox:isOWLObjectProperty(?p) → sqwrl:select(?p)
5. AllPersonsAndTheirCars
Person(?p) ∧ hasCar(?p, ?c) → sqwrl:select(?p, ?c)
6. AllPersonsHavingCarsInAlphabeticalOrder
Person(?p) ^ hasName(, p, ?name) ^ hasCar(?p, ?c) -> sqwrl:select(?name) ^ sqwrl:count(?c)
^ sqwrl:orderBy(?name)
7. AlphabeticallyFirstName
Person(?p) ∧ hasName(?p, ?name) ∧ sqwrl:makeSet(?s, ?name) ∧ sqwrl:min(?first, ?s) →
sqwrl:select(?first)
8. AreaOfCircle
Circle(?c) ∧ hasRadius(?c, ?r) ∧ swrlm:eval(?area, " pi r r", ?r) → sqwrl:select(?area)
9. AverageAgeOfPersons
Person(?p) ∧ hasAge(?p, ?age) → sqwrl:avg(?age)
10. AverageBag
sqwrl:makeBag(?b, 1) ∧ sqwrl:makeBag(?b, 2) ∧ sqwrl:makeBag(?b, 3) ∧ sqwrl:avg(?size, ?
b) → sqwrl:select(?size)
11. AveragePersonAge
Person(?p) ∧ hasAge(?p, ?age) ∧ sqwrl:makeBag(?b, ?age) ∧ sqwrl:avg(?avg, ?b) →
sqwrl:select(?avg)
12. AverageSaleAmountPerProduct
Person(?p) ∧ hasSales(?p, ?sale) ∧ hasAmount(?sale, ?amt) ∧ hasProduct(?sale, ?product) ∧
sqwrl:makeSet(?s, ?amt) ∧ sqwrl:groupBy(?s, ?product) ∧ sqwrl:avg(?avg, ?s) →
sqwrl:select(?product, ?avg)
13. AverageSaleAmountPerState
Person(?p) ∧ hasSales(?p, ?sale) ∧ hasAmount(?sale, ?amt) ∧ hasState(?sale, ?state) ∧
sqwrl:makeBag(?b, ?amt) ∧ sqwrl:groupBy(?b, ?state) ∧ sqwrl:avg(?avg, ?b) → sqwrl:select(?
state, ?avg)
14. AverageSalesAmountPerPerson
Person(?p) ∧ hasSales(?p, ?sale) ∧ hasAmount(?sale, ?amt) ∧ sqwrl:makeBag(?b, ?amt) ∧
sqwrl:groupBy(?b, ?p) ∧ sqwrl:avg(?avg, ?b) → sqwrl:select(?p, ?avg)
15. AverageSet
sqwrl:makeSet(?s, 1) ∧ sqwrl:makeSet(?s, 3) ∧ sqwrl:makeSet(?s, 3) ∧ sqwrl:avg(?avg, ?s)
→ sqwrl:select(?avg)
16. CarManufactureDate
Car(?c) ∧ hasManufactureDate(?c, ?d) → sqwrl:select(?c, ?d)
17. ClassesWithLabels
tbox:isOWLClass(?c) ∧ rdfb:hasLabel(?c, ?l) → sqwrl:select(?c, ?l)
18. CountAllOWLClasses
tbox:isOWLClass(?c) → sqwrl:count(?c)
19. CountAllOWLClassesWithSets
tbox:isOWLClass(?c) ∧ sqwrl:makeSet(?s, ?c) ∧ sqwrl:size(?size, ?s) → sqwrl:count(?s)
20. DifferenceTest
sqwrl:makeSet(?s1, DDI) ∧ sqwrl:makeSet(?s2, AZT) ∧ sqwrl:difference(?d, ?s1, ?s2) ∧
sqwrl:size(?size, ?d) → sqwrl:select(?size)
21. IntersectionTest
sqwrl:makeSet(?s1, DDI) ∧ sqwrl:makeSet(?s1, AZT) ∧ sqwrl:makeSet(?s2, AZT) ∧
sqwrl:intersection(?i, ?s1, ?s2) ∧ sqwrl:size(?size, ?i) → sqwrl:select(?size)
22. Lowest3DDIDosesPerPatient
Person(?p) ∧ hasTreatment(?p, ?tr) ∧ hasDrug(?tr, DDI) ∧ hasDose(?tr, ?dose) ∧
sqwrl:makeSet(?b, ?dose) ∧ sqwrl:groupBy(?b, ?p) ∧ sqwrl:leastN(?least3Doses, ?b, 3) ∧
swrlb:equal(?least3Doses, ?dose) → sqwrl:select(?p, ?least3Doses)
23. LowestDDIDosePerPatient
Person(?p) ∧ hasTreatment(?p, ?tr) ∧ hasDrug(?tr, DDI) ∧ hasDose(?tr, ?dose) ∧
sqwrl:makeSet(?b, ?dose) ∧ sqwrl:groupBy(?b, ?p) ∧ sqwrl:least(?leastDose, ?b) ∧
swrlb:equal(?leastDose, ?dose) → sqwrl:select(?p, ?leastDose)
24. MaximumPersonAge
Person(?p) ∧ hasAge(?p, ?age) → sqwrl:max(?age)
25. NegateIt
swrlb:booleanNot(?r, true) → sqwrl:select(?r)
26. NumberOfAdults
Person(?p) ∧ hasAge(?p, ?age) ∧ swrlb:greaterThan(?age, 17) ∧ sqwrl:makeSet(?s, ?p) ∧
sqwrl:size(?size, ?s) → sqwrl:select(?size)
27. NumberOfCarsInOntology
Car(?c) → sqwrl:count(?c)
28. NumberOfCarsPerPerson
Person(?p) ∧ hasCar(?p, ?c) ∧ sqwrl:makeSet(?s, ?c) ∧ sqwrl:groupBy(?s, ?p) ∧ sqwrl:size(?
size, ?s) → sqwrl:select(?p, ?size)
29. NumberOfTreatments
Person(?p) ∧ hasTreatment(?p, ?t) ∧ sqwrl:makeSet(?s, ?t) ∧ sqwrl:groupBy(?s, ?p) ∧
sqwrl:size(?size, ?s) → hasNumberOfTreatments(?p, ?size)
30. NumberOfTreatmentsQuery
Person(?p) ∧ hasNumberOfTreatments(?p, 3) → sqwrl:select(?p)
31. NumberOfTreatmentsQuery3
Person(?p) ∧ hasNumberOfTreatments(?p, ?n) ∧ swrlb:equal(?n, 3) → sqwrl:select(?p)
32. PersonAndCarCount
Person(?p) ∧ hasCar(?p, ?c) → sqwrl:select(?p) ∧ sqwrl:count(?c)
33. PersonAverageDDIDosesAndAverageAllDDIDoses
Person(?p) ∧ hasTreatment(?p, ?t) ∧ hasDrug(?t, DDI) ∧ hasDose(?t, ?dose) ∧
sqwrl:makeBag(?sp, ?dose) ∧ sqwrl:groupBy(?sp, ?p) ∧ sqwrl:makeBag(?sddi, ?dose) ∧
sqwrl:avg(?avgP, ?sp) ∧ sqwrl:avg(?avgDDI, ?sddi) → sqwrl:select(?p, ?avgP, ?avgDDI)
34. PersonAverageDrugDosesAndAverageAllDrugDoses
Person(?p) ∧ hasTreatment(?p, ?t) ∧ hasDrug(?t, ?d) ∧ hasDose(?t, ?dose) ∧
sqwrl:makeBag(?sp, ?dose) ∧ sqwrl:groupBy(?sp, ?p, ?d) ∧ sqwrl:makeBag(?sd, ?dose) ∧
sqwrl:avg(?avgP, ?sp) ∧ sqwrl:avg(?avgD, ?sd) → sqwrl:select(?p, ?avgP, ?avgD)
35. PersonNames
Person(?p) ∧ hasName(?p, ?name) → sqwrl:select(?name)
36. PersonsAndAges
Person(?p) ∧ hasAge(?p, ?age) → sqwrl:select(?p, ?age)
37. PersonsAndTreatmentTimes
Person(?p) ∧ hasTreatment(?p, ?t) ∧ Treatment(?t) ∧ temporal:hasStartTime(?t, ?start) ∧
temporal:hasFinishTime(?t, ?finish) → sqwrl:select(?p, ?start, ?finish)
38. PersonsOnMoreThan1Drug
Person(?p) ∧ hasTreatment(?p, ?t) ∧ hasDrug(?t, ?d) ∧ sqwrl:makeSet(?s, ?d) ∧
sqwrl:groupBy(?s, ?p) ∧ sqwrl:size(?size, ?s) ∧ swrlb:greaterThan(?size, 1) → sqwrl:select(?
p, ?size)
39. PersonsWithAboveAverageDDIDoses
Person(?p) ∧ hasTreatment(?p, ?t) ∧ hasDrug(?t, DDI) ∧ hasDose(?t, ?dose) ∧
sqwrl:makeBag(?sp, ?dose) ∧ sqwrl:groupBy(?sp, ?p) ∧ sqwrl:makeBag(?sddi, ?dose) ∧
sqwrl:avg(?avgP, ?sp) ∧ sqwrl:avg(?avgDDI, ?sddi) ∧ swrlb:greaterThan(?avgP, ?avgDDI) →
sqwrl:select(?p, ?avgP, ?avgDDI)
40. PersonsWithAgesGreaterThanTheAverage
Person(?p) ∧ hasAge(?p, ?age) ∧ sqwrl:makeBag(?b, ?age) ∧ sqwrl:avg(?avg, ?b) ∧
swrlb:greaterThan(?age, ?avg) → sqwrl:select(?p, ?age, ?avg)
41. PersonsWithAgesLessThanTheAverageAge
Person(?p) ∧ hasAge(?p, ?age) ∧ sqwrl:makeBag(?b, ?age) ∧ sqwrl:avg(?avg, ?b) ∧
swrlb:lessThan(?age, ?avg) → sqwrl:select(?p, ?age, ?avg)
42. PersonsWithAverageDDIDoseMoreThan10PercentOfAverage
Person(?p) ∧ hasTreatment(?p, ?t) ∧ hasDrug(?t, DDI) ∧ hasDose(?t, ?dose) ∧
sqwrl:makeBag(?sp, ?dose) ∧ sqwrl:groupBy(?sp, ?p) ∧ sqwrl:makeBag(?sddi, ?dose) ∧
sqwrl:avg(?avgP, ?sp) ∧ sqwrl:avg(?avgDDI, ?sddi) ∧ swrlm:eval(?r, "(avgP - avgDDI) /
avgDDI * 100", ?avgP, ?avgDDI) ∧ swrlb:greaterThan(?r, 10) → sqwrl:select(?p, ?avgP, ?
avgDDI)
43. PersonsWithAverageDDIDoses
Person(?p) ∧ hasTreatment(?p, ?t) ∧ hasDrug(?t, DDI) ∧ hasDose(?t, ?dose) ∧
sqwrl:makeBag(?bd, ?dose) ∧ sqwrl:groupBy(?bd, ?p) ∧ sqwrl:avg(?avg, ?bd) ∧ sqwrl:size(?
size, ?bd) → sqwrl:select(?p, ?avg, ?size)
44. PersonsWithDDIOrAZTTreatments
Person(?p) ∧ hasTreatment(?p, ?t) ∧ hasDrug(?t, ?d) ∧ sqwrl:makeSet(?s, ?d) ∧
sqwrl:groupBy(?s, ?p) ∧ sqwrl:makeSet(?sd, DDI) ∧ sqwrl:makeSet(?sd, AZT) ∧
sqwrl:intersects(?s, ?sd) → sqwrl:select(?p)
45. PersonsWithDDITreatments
Person(?p) ∧ hasTreatment(?p, ?t) ∧ hasDrug(?t, ?d) ∧ sqwrl:makeSet(?sp, ?d) ∧
sqwrl:groupBy(?sp, ?p) ∧ sqwrl:makeSet(?sddi, DDI) ∧ sqwrl:intersects(?sp, ?sddi) →
sqwrl:select(?p)
46. PersonsWithExactly2DrugDoses
Person(?p) ∧ hasTreatment(?p, ?t) ∧ hasDrug(?t, ?d) ∧ sqwrl:makeSet(?sp, ?d) ∧
sqwrl:groupBy(?sp, ?p) ∧ sqwrl:size(2, ?sp) → sqwrl:select(?p)
47. PersonsWithFirst2Treatments
Person(?p) ∧ hasTreatment(?p, ?t) ∧ temporal:hasStartTime(?t, ?start) ∧ sqwrl:makeSet(?
s, ?start) ∧ sqwrl:groupBy(?s, ?p) ∧ sqwrl:leastN(?min2, ?s, 2) ∧ swrlb:equal(?min2, ?start)
→ sqwrl:selectDistinct(?p, ?t, ?start)
48. PersonsWithFirstTreatment
Person(?p) ∧ hasTreatment(?p, ?t) ∧ temporal:hasStartTime(?t, ?start) ∧ sqwrl:makeSet(?
s, ?start) ∧ sqwrl:min(?min, ?s) ∧ swrlb:equal(?min, ?start) → sqwrl:select(?p, ?start)
49. PersonsWithLessThanAverageDDIDoses
Person(?p) ∧ hasTreatment(?p, ?t) ∧ hasDrug(?t, DDI) ∧ hasDose(?t, ?dose) ∧
sqwrl:makeBag(?sp, ?dose) ∧ sqwrl:groupBy(?sp, ?p) ∧ sqwrl:makeBag(?sddi, ?dose) ∧
sqwrl:avg(?avgP, ?sp) ∧ sqwrl:avg(?avgDDI, ?sddi) ∧ swrlb:lessThan(?avgP, ?avgDDI) →
sqwrl:select(?p, ?avgP, ?avgDDI)
50. PersonsWithMaximumAge
Person(?p) ∧ hasAge(?p, ?age) ∧ sqwrl:makeSet(?s, ?age) ∧ sqwrl:max(?max, ?s) ∧
swrlb:equal(?age, ?max) → sqwrl:select(?p, ?max)
51. PersonsWithMaximumDosePerDrug
Person(?p) ∧ hasTreatment(?p, ?t) ∧ hasDrug(?t, ?d) ∧ hasDose(?t, ?dose) ∧
sqwrl:makeBag(?s, ?dose) ∧ sqwrl:groupBy(?s, ?p, ?d) ∧ sqwrl:max(?max, ?s) →
sqwrl:select(?p, ?d, ?max)
52. PersonsWithMinimumAge
Person(?p) ∧ hasAge(?p, ?age) ∧ sqwrl:makeSet(?s, ?age) ∧ sqwrl:min(?min, ?s) ∧
swrlb:equal(?age, ?min) → sqwrl:select(?p, ?min)
53. PersonsWithMinimumDrugDuration
Person(?p) ∧ hasTreatment(?p, ?t) ∧ temporal:hasStartTime(?t, ?start) ∧
temporal:hasFinishTime(?t, ?finish) ∧ temporal:duration(?d, ?start, ?finish, temporal:Months) ∧
sqwrl:makeSet(?sp, ?d) ∧ sqwrl:groupBy(?sp, ?p) ∧ sqwrl:makeSet(?s, ?d) ∧ sqwrl:min(?
minP, ?sp) ∧ sqwrl:min(?min, ?s) ∧ swrlb:equal(?minP, ?min) → sqwrl:select(?p, ?d)
54. PersonsWithMoreThan2Cars
Person(?p) ∧ hasCar(?p, ?c) ∧ sqwrl:makeSet(?s, ?c) ∧ sqwrl:groupBy(?s, ?p) ∧ sqwrl:size(?
size, ?s) ∧ swrlb:greaterThan(?size, 2) → sqwrl:select(?p, ?size)
55. PersonsWithNonAZTTreatments
Person(?p) ∧ hasTreatment(?p, ?t) ∧ hasDrug(?t, ?d) ∧ sqwrl:makeSet(?sp, ?d) ∧
sqwrl:groupBy(?sp, ?p) ∧ sqwrl:makeSet(?sazt, AZT) ∧ sqwrl:notIntersects(?sp, ?sazt) →
sqwrl:select(?p)
56. PersonsWithNonDDITreatments
Person(?p) ∧ hasTreatment(?p, ?t) ∧ hasDrug(?t, ?d) ∧ sqwrl:makeSet(?s, ?d) ∧
sqwrl:groupBy(?s, ?p) ∧ sqwrl:notContains(?s, DDI) → sqwrl:select(?p)
57. PersonsWithNumberOfDosesAndAverageDosePerDrug
Person(?p) ∧ hasTreatment(?p, ?t) ∧ hasDrug(?t, ?d) ∧ hasDose(?t, ?dose) ∧
sqwrl:makeBag(?s, ?dose) ∧ sqwrl:groupBy(?s, ?p, ?d) ∧ sqwrl:avg(?avg, ?s) ∧ sqwrl:size(?
size, ?s) → sqwrl:select(?p, ?d, ?size, ?avg)
58. PersonsWithTreatmentsLastingMoreThan1Month
Person(?p) ∧ hasTreatment(?p, ?t) ∧ temporal:hasStartTime(?t, ?start) ∧
temporal:hasFinishTime(?t, ?finish) ∧ temporal:duration(?d, ?start, ?finish, temporal:Months) ∧
swrlb:greaterThan(?d, 1) → sqwrl:selectDistinct(?p, ?d)
59. PersonWithAverageDosePerDrugIn2007
Person(?p) ∧ hasTreatment(?p, ?t) ∧ temporal:hasStartTime(?t, ?start) ∧ temporal:equals(?
start, "2007", temporal:Years) ∧ hasDrug(?t, ?d) ∧ hasDose(?t, ?dose) ∧ sqwrl:makeBag(?
s, ?dose) ∧ sqwrl:groupBy(?s, ?p, ?d) ∧ sqwrl:avg(?avg, ?s) → sqwrl:select(?p, ?d, ?avg)
60. SubClassesOfPersonClass
tbox:isSubClassOf(?subClass, Person) → sqwrl:select(?subClass)
tbox:isDirectSubClassOf(?subClass, Person) - > sqwrl:select(?subClass)
61. SubPropertyOfHasName
tbox:isSubPropertyOf(?subProperty, hasName) - > sqwrl:select(?subProperty)
62. UnionTest
sqwrl:makeSet(?s1, DDI) ∧ sqwrl:makeSet(?s2, AZT) ∧ sqwrl:union(?u, ?s1, ?s2) ∧
sqwrl:size(?size, ?u) → sqwrl:select(?size)
63. NumberOfPerson
Person(?p) ∧ hasName(?p, ?name) → sqwrl:countDistinct(?name)
64. ResultColumns
Person(?p) ∧ hasName(?p, ?namer) ∧ hasCar(?p, ?c) → sqwrl:select(?name, "Number of cars") ∧
sqwrl:count(?c) ∧ sqwrl:columnNames("Name", "Description", "Count")
65. StringConcat
Person(?p) ^ Male(?p) ∧ hasName(?p, ?name) ∧ swrlb:stringConcat(?fullname, "Mr. ", ?name) →
sqwrl:select(?fullname)