From RIF
| Test Type | PositiveEntailmentTest |
|---|
| Contributor | Axel Polleres |
| Status | Proposed |
| Record | |
| Dialect | BLD |
| Purpose | This test case illustrates the use of guard predicates with built-ins, as well as RDF+BLD combinations. |
| Description | The first rule says that a child is eligible for a "young-parents" discount if the difference between the child's age and one of the parent's age is less than 25 years. The second rule says that if a parent's age is not numeric, the parent will be marked as needing to be checked for eligibility. Note that external built-ins can be nested arbitrarily. Note also that built-ins in RIF are defined for arguments of specific datatypes. When an argument is not of the appropriate datatype, it is an error. Since the model-theoretic semantics for RIF does not include the notion of an error, the values of built-in predicates and functions are unspecified in such cases. In order to enable writing of rule sets with controlled behavior, RIF defines guard predicates for each datatype. |
| SeeAlso | YoungParentDiscount_1 |
| SpecRef | http://www.w3.org/2005/rules/wiki/DTB#Guard_Predicates_for_Datatypes |
| ImportedDocument | |
| Premises |
| Presentation Syntax | Document(
Prefix(ex <http://example.com/example#>)
Prefix(func <http://www.w3.org/2007/rif-builtin-function#>)
Prefix(pred <http://www.w3.org/2007/rif-builtin-predicate#>)
Import(<http://example.org/mygraph> <http://www.w3.org/2007/rif-import-profile#RDF>)
Group (
Forall ?c ?p ?ca ?pa(
?p # ex:YoungParent :-
And( ?c[ ex:parent -> ?p ex:age -> ?ca ]
?p[ ex:age -> ?pa ]
External( pred:isInteger( ?pa ) )
External( pred:isInteger( ?ca ) )
External( pred:numeric-less-than(External( func:numeric-subtract( ?pa ?ca ) ) 25 ) )
)
)
Forall ?c ?p ?ca ?pa(
?p # ex:ParentToBeChecked :-
And( ?c[ ex:parent -> ?p ex:age -> ?ca ]
?p[ ex:age -> ?pa ]
Or ( External( pred:isNotInteger ( ?pa ) )
External( pred:isNotInteger ( ?ca ) ) ) )
)
)
) |
| XML | view XML |
|
| Conclusion |
|