Upload
kierra-trask
View
214
Download
1
Embed Size (px)
Citation preview
SQWRL: a Query Language for OWL
Martin O’Connor, Amar DasStanford Center for Biomedical Informatics Research,
Stanford University
SWRL and Querying
• SWRL is a rule language, not a query language
• However, a rule antecedent can be viewed as a pattern matching specification, i.e., a query
• With built-ins, language compliant query extensions are possible
• Hence: SQWRL (Semantic Query-Enhanced Web Rule Language; pronounced squirrel)
Example SWRL Rule: is adult?
Person(?p) ^ hasAge(?p,?age) ^ swrlb:greaterThan(?age,17)
→ Adult(?p)
Classify all persons in an ontology with an age greater than 17 as adults.
Example SQWRL Query
Person(?p) ^ hasAge(?p,?age) ^ swrlb:greaterThan(?age,17)
→ sqwrl:select(?p, ?age)
List all persons in an ontology with an age greater than 17.
Person(?p) ^ hasAge(?p,?age) ^ swrlb:greaterThan(?age,17)
→ sqwrl:select(?p, ?age) ^ sqwrl:orderBy(?age)
List all persons in an ontology with an age greater than 17 and order the result by age in ascending order.
Example SQWRL Query:Ordering Results
Also: orderByDecending
Important: no way of asserting count in ontology!
Example SQWRL Query:Counting Results
Car(?c) → sqwrl:count(?c)
Count all cars in ontology.
Person(?p) ^ hasAge(?p, ?age) → sqwrl:avg(?age)
Also: sqwrl:max, sqwrl:min, sqwrl:sum
Example SQWRL Query:Aggregating Results
Average age of persons in ontology.
Example SQWRL Query: Arbitrary OWL Class Expressions
(hasChild >= 1)(?x) → sqwrl:select(?x)
SQWRL can act as a DL query language
Individuals with cardinality restrictions.
Semantics (Briefly)
• Any SWRL body is valid query specification
• Does not violate OWA
• Does assume UNA
Useful but Relatively Inexpressive
• Useful but relatively inexpressive. Needs:– Negation As Failure– Disjunction– Complex Counting– Complex Aggregation
• We have recently added sets to the language to tackle these problems
SQWRL: Basic Set Operator
Person(?p) °
sqwrl:makeSet(?s, ?p) ^ sqwrl:size(?size, ?s)
→ sqwrl:select(?size)
Count all persons in ontology.
Ser operators: sqwrl:isEmpty, sqwrl:union, sqwrl:difference
SQWRL: Negation as Failure
Drug(?d) ^ BetaBlocker(?b) °
sqwrl:makeSet(?s1, ?d) ^ sqwrl:makeSet(?s2, ?b) ^
sqwrl:difference(?s3, ?s1, ?s2) ^ sqwrl:size(?size, ?s3)
→ sqwrl:select(?size)
List the number of non beta blocker drugs in ontology.
SQWRL: Disjunction
AntiHypertensive(?d1) ^ BetaBlocker(?d2) °
sqwrl:makeSet(?s1, ?d1) ^ sqwrl:makeSet(?s2, ?d2) ^
sqwrl:union(?s3, ?s1, ?s2) ^ sqwrl:size(?size, ?s3)
→ sqwrl:select(?size)
List the number of beta blocker or anti-hypertensive drugs in ontology.
SQWRL: Complex Counting
Patient(?p) ^ hasDrug(?p,?d) °
sqwrl:makeSet(?s, ?d) ^ sqwrl:groupBy(?s, ?p) ^
sqwrl:size(?n, ?s) ^ swrlb:greaterThan(?n, 2)
→ sqwrl:select(?p)
List all patients on more than two drugs.
SQWRL: Complex Aggregation
Patient(?p) ^ hasDrug(?p,?d) ^ hasDose(?d, ?dose) °
sqwrl:makeSet(?s, ?dose) ^ sqwrl:groupBy(?s, ?p, ?d) ^
sqwrl:avg(?avg, ?s)
→ sqwrl:select(?p, ?d, ?avg)
List the average dose of each drug taken by each patient.
SQWRL: NAF, Disjunction, Complex Counting and Aggregation
Patient(?p) ^ hasDrug(?p,?d) ^ hasDose(?d, ?dose) ^
BetaBlocker(?d1) ^ AntiHypertensive(?d2) °
sqwrl:makeSet(?s1, ?dose) ^ sqwrl:groupBy(?s1, ?p, ?d) ^
sqwrl:makeSet(?s2, ?drug) ^ sqwrl:groupBy(?s2, ?p) ^
sqwrl:makeSet(?s3, ?d1, ?d2) ^
sqwrl:avg(?avg, ?s1) ^
sqwrl:size(?n, ?s2) ^ swrlb:greaterThan(?n, 2) ^
sqwrl:intersection(?s4, ?s2, ?s3) ^ sqwrl:isEmpty(?s4)
→ sqwrl:select(?p, ?d, ?avg)
List the average dose of patients that are on more than two drugs and where none of those drugs is a beta blocker or anti-hypertensive.
Advantages of SWRL-Based Query Language
• No need to invent a new semantics• Standard(ish) presentation syntax (° is syntactic sugar)• Standard serialization • Can use existing reasoning infrastructure• Can use existing editors• On-the-fly query checking in editors• For SWRL users, easy to learn• Extensible with built-ins (TBox, RDF,XML…)• Useful for debugging SWRL rules• Queries can interoperate with rules• Not SPARQL!
Summary
• Core language features available for 1+ years in Protege-OWL
• Set operators will be available in month or so
• Plans for Protege4 port