W3C


RIF Data Types and Built-Ins

W3C Editor's Draft 18 May09 June 2008

This version:
http://www.w3.org/2005/rules/wg/draft/ED-rif-dtb-20080518/http://www.w3.org/2005/rules/wg/draft/ED-rif-dtb-20080609/
Latest editor's draft:
http://www.w3.org/2005/rules/wg/draft/rif-dtb/
Previous version:
http://www.w3.org/2005/rules/wg/draft/ED-rif-dtb-20080222/http://www.w3.org/2005/rules/wg/draft/ED-rif-dtb-20080518/ (color-coded diff)
Editors:
Axel Polleres, DERI
Harold Boley, National Research Council Canada
Michael Kifer, State University of New York at Stony Brook


Abstract

Status of this Document

May Be Superseded

This section describes the status of this document at the time of its publication. Other documents may supersede this document. A list of current W3C publications and the latest revision of this technical report can be found in the W3C technical reports index at http://www.w3.org/TR/.

This document is being published as one of a set of 56 documents:

  1. RIF Use Cases and Requirements
  2. RIF Basic Logic Dialect
  3. RIF Framework for Logic Dialects
  4. RIF RDF and OWL Compatibility
  5. RIF Production Rule Dialect
  6. RIF Data Types and Built-Ins (this document)

RIF Use Cases and RequirementsPlease Comment By 2008-05-252008-06-13

The Rule Interchange Format (RIF) Working Group seeks public feedback on these Working Drafts. Please send your comments to public-rif-comments@w3.org (public archive). If possible, please offer specific changes to the text that would address your concern. You may also wish to check the Wiki Version of this document for internal-review comments and changes being drafted which may address your concerns.

No Endorsement

Publication as a Working Draft does not imply endorsement by the W3C Membership. This is a draft document and may be updated, replaced or obsoleted by other documents at any time. It is inappropriate to cite this document as other than work in progress.

Patents

This document was produced by a group operating under the 5 February 2004 W3C Patent Policy. W3C maintains a public list of any patent disclosures made in connection with the deliverables of the group; that page also includes instructions for disclosing a patent. An individual who has actual knowledge of a patent which the individual believes contains Essential Claim(s) must disclose the information in accordance with section 6 of the W3C Patent Policy.



This document, developed by the Rule Interchange Format (RIF) Working Group, specifies a list of primitive datatypes, built-in functions and built-in predicates supportedrequired by RIF dialects such as the RIF Basic Logic Dialect. This list shall be viewed as a catalogue which dialects can use by referencing which datatypes and builtins must be supported by implementations of these specific dialects. Some of the RIF supporteddatatypes are adopted from XML Schema Part 2: Datatypes Second Edition .[XML-SCHEMA2]. A large part of the definitions of the listed functions and operators are adapted from XQuery 1.0 and XPath 2.0 Functions and Operators .[XPath-Functions].


Contents

1 Naming and notational conventions used in this document

Throughout this document we use the following prefixes for compact IRIs [CURIE] used for symbol spaces:spaces or for IRI constants in RIF's presentation syntax:


2 Constants, Symbol SpacesSpaces, and Data Types

2.1 Constants and Symbol Spaces

This section reproduces the definition ofEach constant (that is, each non-keyword symbol) in RIF belongs to a particular symbol spaces, which arespace. To refer to a constant in a particular RIF symbol space, we use the following presentation syntax:

"literal"^^<identifier>

where literal is called the lexical part of the syntacticsymbol, and semantic framework for RIF's logic-based dialects . Definition (Symbol space). Aidentifier is an IRI identifying the symbol spacespace. Here literal is a named subset ofUnicode string that must be an element in the setlexical space of the symbol space identified by IRI.

Formally, we define symbol spaces as follows.

Definition (Symbol space). A symbol space is a named subset of the set of all constants, Const in RIF. They are part of the logical RIF framework (RIF-FLD).Each symbol in Const belongs to exactly one symbol space.

Each symbol space has an associated lexical space,space and a unique identifier, and, possibly, one or more aliases.IRI identifying it. More precisely,

An alias is also a sequence of unicode characters, but it is not required to form an IRI. Different symbol spaces cannot share the same identifier or an alias.The identifiers and aliasesof symbol spaces are not themselves constant symbols in RIF.   ☐However, to simplify the language, we will often use symbol space identifiers to refer to the actual symbol spaces (for instance, we may use "symbol space xsd:string" instead of "symbol space identified by xsd:string").


To refer to a constant in a particular RIF symbol space, we use the following presentation syntax: "literal"^^symspace where literal is called the lexical part of the symbol, and symspace is an identifier or an alias of the symbol space. Here literal is a sequence of Unicode characters that must be an element in the lexical space of the symbol space symspace . For instance, "1.2"^^xsd:decimal and "1"^^xsd:decimal are legal symbols because 1.2 and 1 are members of the lexical space of the XML Schema data type xsd:decimal . On the other hand, "a+2"^^xsd:decimal is not a legal symbol, since a+2 is not part of the lexical space of xsd:decimal . The set of all symbol spaces that partition Const is considered to be part of the logic language of RIF-FLD.RIF requires that all dialects include the following symbol spaces. Rule sets that are exchanged through RIF can use additional symbol spaces.

xsd:time ( http://www.w3.org/2001/XMLSchema#time ). xsd:date ( http://www.w3.org/2001/XMLSchema#date ). xsd:dateTime http://www.w3.org/2001/XMLSchema#dateTime ).Editor's note: The lexical spacesgroup still discussed whether all subtypes of xsd:decimal shall be supported or whether a basic subset such as xsd:integer and xsd:long should be supported.

The lexical spaces of the above symbol spaces are defined in the above symbol spaces are defined in thedocument [XML-SCHEMA2].

These two symbol spaces represent two subtypes of the XML Schema datatype xsd:duration with well-defined value spaces, since xsd:duration does not have a well-defined value space (this may be corrected in later revisions of XML Schema datatypes, in which case the revised datatype would be suitable for RIF DTB). The lexical spaces of the above symbol spaces are defined in the document [XDM].

This symbol space represents XML content. The lexical space of rdf:XMLLiteral is defined in the document [RDF-CONCEPTS].

This symbol space represents text strings with a language tag attached. The lexical space of rif:text is the set of all Unicode strings of the form ...@LANG, i.e., strings that end with @LANG where LANG is a language identifier as defined in [RFC-3066].

Editor's Note: rif:text (in particular, its identifying IRI) is an AT RISK feature. We expect a joint effort with the OWL WG to discuss rif:text and the equivalent OWL datatype, striving for a uniform symbol space for such text strings with a language tag.

Constant symbols that belong to this symbol space are intended to be used in a way similar to RDF resources [RDF-SCHEMA]. The lexical space consists of all absolute IRIs as specified in [RFC-3987]; it is unrelated to the XML primitive type anyURI. A rif:iri constant must be interpreted as a reference to one and the same object regardless of the context in which that constant occurs.

Symbols in this symbol space are local to the RIF documents in which they occur. This means that occurrences of the same rif:local constant in different documents are viewed as unrelated distinct constants, but occurrences of the same rif:local constant in the same document must refer to the same object. The lexical space of rif:local is the same asa subspace of the lexical space of xsd:string. 2.2 Data Types Data types in RIFNamely, we allow unicode strings which are also valid XML NCNames as defined in [XML-NS].

Syntactically, RIF's presentation syntax introduces, besides the basic notion several shortcuts for particular symbol spaces

which have special semantics."literal"^^<identifier>

in order to make the presentation syntax more readable. That is, each datatypeRIF's presentation syntax for constants is characterizeddefined by a fixed lexical space, value space and lexical-to-value-mapping. Definition (Primitive data type). A primitive data type (or just a data type ,the following EBNF.
  ANGLEBRACKIRI ::= '<' IRI_REF '>'
  STRING        ::= '"' UNICODESTRING '"'
  CURIE         ::=  PNAME_LN | PNAME_NS
  Const         ::= STRING '^^'ANGLEBRACKIRI
                 | STRING '^^' CURIE
                 | ANGLEBRACKIRI        shortcut for  short) is a symbol space that has an associated set, calledrif:iri
                 | CURIE                shortcut for rif:iri
                 | STRING               shortcut for xsd:string
                 | NumericLiteral       shortcut for xsd:integer,xsd:decimal,xsd:double
                 | '_' LocalName        shortcut for rif:local

This relies on reuse of the value spacefollowing grammar productions defined in other documents:

PNAME_LN, cf. http://www.w3.org/TR/rdf-sparql-query/#rPNAME_LN

PNAME_NS, cf. http://www.w3.org/TR/rdf-sparql-query/#rPNAME_NS

LANGTAG, cf. http://www.w3.org/TR/rdf-sparql-query/#rLANGTAG

NumericLiteral, cf. http://www.w3.org/TR/rdf-sparql-query/#rNumericLiteral

IRI_REF, cf. http://www.w3.org/TR/rdf-sparql-query/#rIRI_REF

LocalName, cf. http://www.w3.org/TR/2006/REC-xml-names11-20060816/#NT-LocalPart

UNICODESTRING, any unicode string where quotes are escaped and a mapping fromadditionally all the other escpape sequences defined in http://www.w3.org/TR/rdf-sparql-query/#grammarEscapes and http://www.w3.org/TR/rdf-sparql-query/#codepointEscape.

In this grammar, CURIE stands for compact IRIs [CURIE]. For instance, "1.2"^^xsd:decimal and "1"^^xsd:decimal are legal symbols because 1.2 and 1 are members of the lexical space of the XML Schema data type xsd:decimal. On the other hand, "a+2"^^xsd:decimal is not a legal symbol, since a+2 is not part of the lexical space of xsd:decimal.

2.2 Data Types

Data types in RIF are symbol spaces which have special semantics. That is, each datatype is characterized by a fixed lexical space, value space and lexical-to-value-mapping.

Definition (Primitive data type). A primitive data type (or just a data type, for short) is a symbol space that has

Semantic structures are always defined with respect to a particular set of data types, denoted by DTS. In a concrete dialect, DTS always includes the data types supported by that dialect. All RIF dialects must support the following primitive data types:

Their value spaces and the lexical-to-value-space mappings are defined as follows:

The value space and the lexical-to-value-space mapping for rif:text defined here are compatible with RDF's semantics for strings with named tags [RDF-SEMANTICS].

3 Syntax and Semantics of Built-ins

3.1 Syntax of Built-ins

A RIF built-in function or predicate is a special case of externally defined terms, which are defined in RIF Framework for Logic Dialects and also reproduced in the direct definition of RIF Basic Logic Dialect (RIF-BLD).

Syntactically,In RIF's presentation syntax built-in predicates and functions in RIFare syntactically represented as external terms of the form:

'External' '(' Expr ')'

where Expr is a positional term as defined in in RIF Framework for Logic Dialects (see also in RIF Basic Logic Dialect). For RIF's normative syntax, see XML Serialization Syntax for RIF-BLD.

RIF-FLD introduces the notion of an external schema to describe both the well-formed externally defined terms and their semantics. In the special case of a RIF built-in, external schemas have especially simple form. A built-in named f that takes n arguments has the schema

(?X( ?X1 ... ?X... ?Xn;   f(?X1 ... ?X... ?Xn) )

Here f(?X1 ... ?Xn) is the actual term that is used to refer to the built-in (in expressions of the form External(f(?X1 ... ?Xn))) and ?X1 ... ?Xn is the list of all variables in that term.

For convenience, a complete definition of external schemas is reproduced in Appendix: Schemas for Externally Defined Terms.


3.2 Semantics of Built-ins

The semantics of external terms in RIF-FLD and RIF-BLD is defined using two mappings: Iexternal and Itruth ο Iexternal.

4 List of Supported Built-in Predicates and Functions

This section defines the syntax and semantics of all built-in predicates and functions in RIF. For each built-in, the following is defined:

  1. The name of the built-in.
  2. The external schema of the built-in.
  3. For a built-in function, how it maps its arguments into a result.

    As explained in Section Semantics of Built-ins, this corresponds to the mapping Iexternal(σ) in the formal semantics of RIF-FLD and RIF-BLD, where σ is the external schema of the built-in.

  4. For a built-in predicate, its truth value when the arguments are substituted with values in the domain.

    As explained in Section Semantics of Built-ins, this corresponds to the mapping Itruth ο Iexternal(σ) in the formal semantics of RIF-FLD and RIF-BLD, where σ is the external schema of the built-in.

  5. The intended domains for the arguments of the built-in.

    Typically, built-in functions and predicates are defined over the value spaces of appropriate data types. These are the intended domains of the arguments. When an argument falls outside of its intended domain, it is understood as an error. Since this document defines a model-theoretic semantics for RIF built-ins, which does not support the notion of an error, the definitions leave the values of the built-in predicates and functions unspecified in such cases. This means that for different semantic structures, the value of Iexternal(σ)(a1 ... an) can be anything if one of the arguments is not in its intended domain. Similarly, Itruth ο Iexternal(σ)(a1 ... an) can be t in some interpretations and f in others.

    This indeterminacy in case of an error implies that applications must not make any assumptions about the values of built-ins in such situations. Implementations are even allowed to abort in such cases and the only safe way to communicate rule sets that contain built-ins among RIF-compliant systems is to use data type guards.


Many built-in functions and predicates described below are adapted from XQuery 1.0 and XPath 2.0 Functions and Operators[XPath-Functions] and, when appropriate, we will refer to the definitions in that specification in order to avoid copying them.

4.1 Guard Predicates for Datatypes

RIF requires guard predicates for all its supported datatypes.

Accordingly, the following schemas are defined:

  1. ( ?arg( ?arg1; "http://www.w3.org/2007/rif-builtin-predicates#isLong"^^rif:iri ( ?argpred:isInteger( ?arg1 ) )

  2. ( ?arg( ?arg1; "http://www.w3.org/2007/rif-builtin-predicates#isInteger"^^rif:iri( ?argpred:isDecimal ( ?arg1 ) )

  3. ( ?arg( ?arg1; "http://www.w3.org/2007/rif-builtin-predicates#isDecimal"^^rif:iri ( ?argpred:isDouble ( ?arg1 ) )

  4. ( ?arg( ?arg1; "http://www.w3.org/2007/rif-builtin-predicates#isString"^^rif:iri ( ?argpred:isString ( ?arg1 ) )

  5. ( ?arg( ?arg1; "http://www.w3.org/2007/rif-builtin-predicates#isTime^^rif:iri ( ?argpred:isTime ( ?arg1 ) )

  6. ( ?arg( ?arg1; "http://www.w3.org/2007/rif-builtin-predicates#isDateTime"^^rif:iri ( ?argpred:isDateTime ( ?arg1 ) )

  7. ( ?arg( ?arg1; "http://www.w3.org/2007/rif-builtin-predicates#isXMLLiteral"^^rif:iri ( ?argpred:isDayTimeDuration ( ?arg1 ) )

  8. ( ?arg( ?arg1; "http://www.w3.org/2007/rif-builtin-predicates#isText"^^rif:iri ( ?argpred:isYearMonthDuration ( ?arg1 ) )

  9. Likewise, RIF has negative guards for all its supported datatypes. These built-in predicates have the schema ( ?arg( ?arg1; "http://www.w3.org/2007/rif-builtin-predicates#isNot DATATYPE "^^rif:iri ( ?argpred:isXMLLiteral ( ?arg1 ) )

  10. with I external( ?arg1; "http://www.w3.org/2007/rif-builtin-predicates#isNot DATATYPE "^^rif:iripred:isText ( ?arg1 ) )

4.2 Negative Guard Predicates for Datatypes

Likewise, RIF has negative guards for all its supported datatypes.

Accordingly, the following schemas are defined:

  1. ( ?arg( ?arg1; "http://www.w3.org/2007/rif-builtin-predicates#isNotLong"^^rif:iri ( ?argpred:isNotInteger ( ?arg1 ) )

  2. ( ?arg( ?arg1; "http://www.w3.org/2007/rif-builtin-predicates#isNotInteger"^^rif:iri ( ?argpred:isNotDecimal ( ?arg1 ) )

  3. ( ?arg( ?arg1; "http://www.w3.org/2007/rif-builtin-predicates#isNotDecimal"^^rif:iri ( ?argpred:isNotDouble ( ?arg1 ) )

  4. ( ?arg( ?arg1; "http://www.w3.org/2007/rif-builtin-predicates#isNotString"^^rif:iri ( ?argpred:isNotString ( ?arg1 ) )

  5. ( ?arg( ?arg1; "http://www.w3.org/2007/rif-builtin-predicates#isNotTime"^^rif:iri ( ?argpred:isNotTime ( ?arg1 ) )

  6. ( ?arg( ?arg1; "http://www.w3.org/2007/rif-builtin-predicates#isNotDateTime"^^rif:iri ( ?argpred:isNotDateTime ( ?arg1 ) )

  7. ( ?arg( ?arg1; "http://www.w3.org/2007/rif-builtin-predicates#isNotXMLLiteral"^^rif:iri ( ?argpred:isNotDayTimeDuration ( ?arg1 ) )

  8. ( ?arg( ?arg1; "http://www.w3.org/2007/rif-builtin-predicates#isNotText"^^rif:iri ( ?argpred:isNotYearMonthDuration ( ?arg1 ) )

  9. ( ?arg1; pred:isNotXMLLiteral ( ?arg1 ) )

  10. ( ?arg1; pred:isNotText ( ?arg1 ) )

Future dialects may extend this list of guards to other datatypes, but RIF does not require guards for all datatypes.

4.24.3 Cast functions for Datatypes and rif:iri

RIF requires cast functions for all its supported datatypes, i.e. ( ?argfor each datatype DATATYPE there is an external function as follows:

Note that neither the threeremaining data types xsd:long , rif:XMLLiteral ,types, i.e. the subtypes of xsd:integer and err:rif:XMLLiteral, nor the symblsymbol space rif:iri do notappear in that table, butthe following considerationsconversion table of [XPath-Functions], but the following considerations apply:

Editor's note: Although rif:iri is not a datatype, I left conversions from and to rif:irisrif:iris in the list of cast functions, since I see someto cover use cases in the context of RDF ifwhere you want to extract a string from an IRI denoting an RDF resource and vice versa. See also the use case mentioned in http://lists.w3.org/Archives/Public/public-rif-wg/2008Mar/0011.html

4.34.4 Numeric Functions and Predicates

4.3.1The following functions and predicates are adapted from the respective numeric functions and operators in [XPath-Functions].

4.4.1 Numeric Functions

1. op:numeric-add

The following numeric built-in functions are defined accordingly with respect to their corresponding operators in [XPath-Functions] and we will only add further explanations where needed.

2. op:numeric-subtract

3. op:numeric-multiply

4. op:numeric-divide

5. op:numeric-integer-divide

6. op:numeric-mod

4.4.2 Numeric Predicates

1. op:numeric-equal

The following numeric built-in predicates are defined for fn:concat .acordingly with respect to their corresponding operators in [XPath-Functions].

2. fn:string-join ( ?argop:numeric-less-than

( ?arg3. op:numeric-greater-than

... ( ?arg4. pred:numeric-less-than-or-equal

Returns a xsd:string created by concatenating the arguments5. pred:numeric-greater-than-or-equal

Returns the portion of the value of ?sourceString beginning at4.5 Functions and Predicates on Strings

The position indicated byfollowing functions and predicates are adapted from the value of ?startingLocrespective functions and continuing foroperators on strings in [XPath-Functions].


Editor's note: The numberfollowing treatment of characters indicated bybuilt-ins which may have multiple arities is a strawman proposal currently under discussion in the value of ?length.working group.

In the characters returned do not extend beyond ?sourceString. If ?startingLoc is zerofollowing, we encounter several versions of some built-ins with varying arity, since XPath and XQuery allow overloading, i.e. the same function or negative, only those charactersoperator name occurring with different arities. We treat this likewise in positions greater than zero are returned. 4. fn:string-length ( func:string-length1() ) ( ?arg ; func:string-length2( ?arg ) ) Returns an xsd:integer equal toRIF, by numbering the length in charactersdifferent versions of the argument if it is a xsd:string. 5. fn:upper-case ( ?arg ; func:upper-case( ?argrespective built-ins and treating the unnumbered version as syntactic sugar, i.e. for instance instead of External( func:concat2( str1, str2) ) 6. fn:lower-case ( ?arg ; func:lower-case( ?argand External( func:concat3( str1 str2 str3 ) ) 7. fn:encode-for-uri ( ?arg ; func:encode-for-uri( ?argwe equally allow simply to write External( func:concat( str1, str2) ) This function encodes reserved characters in an xs:stringand External( func:concat( str1 str2 str3 ) ). Note that this is intended to be used in the path segment of a URI. It is invertible butreally purely syntactic sugar, and does not idempotent. 8. fn:iri-to-uri ( ?iri ; func:iri-to-uri ( ?iri ) ) 9. fn:escape-html-uri ( ?uri ;func:escape-html-uri( ?uri ) ) This function escapes all characters except printable characters of the US-ASCII coded character set, specifically the octets ranging from 32 to 126 (decimal). The effect ofmean that for external predicates and functions we lift the function is to escape a URIrestriction made in the manner html user agents handle attribute valuesBLD that expect URIs.each character in $uri to be escaped is replaced by an escape sequence, which is formed by encoding the character as a sequence of octets in UTF-8,function and then representing each of these octets in the form %HH, where HH is the hexadecimal representation of the octet.predicate has a unique assigned arity. Those schemata for which we allow this function must always generate hexadecimal values usingsyntactic sugar, appear in the upper-case letters A-F. 10. fn:substring-before ( ?argsame box.

4.5.1 Functions on Strings

1. fn:compare

The following schemata are defined analogously with respect to their corresponding operators as defined in Unicode Collation Algorithm . Shall[XPath-Functions] and we return an error or false on typing errors?only give informal descriptions of the respective mappings Iexternal.

2. fn:starts-with ( ?argfn:concat

3. fn:string-join

4. fn:substring

5. fn:string-length

6. fn:upper-case

7. fn:lower-case

8. fn:encode-for-uri

9. fn:iri-to-uri


10. fn:escape-html-uri

11. fn:substring-before

12. fn:substring-after

13. fn:replace

4.5.2 Predicates on Strings

1. fn:contains


2. fn:starts-with


3. fn:ends-with

4. fn:matches

4.6 Functions and Predicates on Dates, Times, and Durations

If not stated otherwise, in the following we define schemas for functions and operators defined on the date and time datatypes in [XPath-Functions].

As defined in Section 3.3.2 Dates and Times, xsd:dateTime, xsd:date, xsd:time, xsd:gYearMonth, xsd:gYear, xsd:gMonthDay, xsd:gMonth, xsd:gDay values, referred to collectively as date/time values, are represented as seven components or properties: year, month, day, hour, minute, second and timezone. The value of the first five components are xsd:integers. The value of the second component is an xsd:decimal and the value of the timezone component is an xsd:dayTimeDuration. For all the date/time datatypes, the timezone property is optional and may or may not be present. Depending on the datatype, some of the remaining six properties must be present and some must be absent. Absent, or missing, properties are represented by the empty sequence. This value is referred to as the local value in that the value is in the given timezone. Before comparing or subtracting xsd:dateTime values, this local value must be translated or normalized to UTC.

4.6.1 Functions on Dates, Times, and Durations

1. fn:year-from-dateTime

Note that we we slightly deviate here from the original definition of fn:year-from-dateTime which says: "If ?arg is the empty sequence, returns the empty sequence." We have no terminology of "sequence". The following schemata are defined analogously with respect to their corresponding operators as defined in [XPath-Functions] and we only give informal descriptions of the respective mappings Iexternal.

2. fn:month-from-dateTime

3. fn:day-from-dateTime

4. fn:hours-from-dateTime

5. fn:minutes-from-dateTime

6. fn:seconds-from-dateTime

7. fn:year-from-date

8. fn:month-from-date

9. fn:day-from-date

10. fn:hours-from-time

11. fn:minutes-from-time

12. fn:seconds-from-time

13. fn:years-from-duration

14. fn:months-from-duration

15. fn:days-from-duration

16. fn:hours-from-duration

17. fn:minutes-from-duration

18. fn:seconds-from-duration

19. fn:timezone-from-dateTime

The following schematatwo functions are defined analogously with respect to their corresponding operators as defined in XQuery 1.0 and XPath 2.0 Functionsfor intended domains xsd:date and Operatorsxsd:time

20. fn:timezone-from-date

21. fn:timezone-from-date

22. op:add-yearMonthDurations

Adds two xsd:yearMonthDurations. Returns an xsd:yearMonthDuration.

2. op:dateTime-less-than ( ?arg 1 ?arg 2 ; pred:dateTime-less-than(?arg 1 ?arg 222. op:subtract-yearMonthDurations

3. op:dateTime-greater-than ( ?arg 1 ?arg 2 ; pred:dateTime-greater-than(?arg 1 ?arg 2Subtracts one xsd:yearMonthDuration from another. Returns an xs:yearMonthDuration.

23. op:multiply-yearMonthDuration

4. op:date-equal ( ?arg 1 ?arg 2 ; pred:date-equal( ?arg 1 ?arg 2Multiplies an xsd:yearMonthDuration by an xsd:double. Returns an xsd:yearMonthDuration.

24. op:divide-yearMonthDuration

Divides an xsd:yearMonthDuration by an xsd:double. Returns an xsd:yearMonthDuration.

25. op:divide-yearMonthDuration-by-yearMonthDuration

Divides an xsd:yearMonthDuration by an xsd:yearMonthDuration. Returns an xsd:decimal.

26. op:add-dayTimeDurations

Adds two xsd:dayTimeDurations. Returns an xsd:dayTimeDuration.

27. op:subtract-dayTimeDurations

Subtracts one xsd:dayTimeDuration from another. Returns an xsd:dayTimeDuration.

28. op:multiply-dayTimeDuration

Multiplies an xsd:dayTimeDuration by a xsd:double. Returns an xsd:dayTimeDuration.

29. op:divide-dayTimeDuration

5. op:date-less-than ( ?arg 1 ?arg 2 ; pred:date-less-than(?arg 1 ?arg 2Divides an xsd:dayTimeDuration by an xsd:double. Returns an xsd:dayTimeDuration.

30. op:divide-dayTimeDuration-by-dayTimeDuration

6. op:date-greater-than ( ?argDivides an xsd:dayTimeDuration by an xsd:dayTimeDuration. Returns an xsd:decimal.

4.6.2 Predicates on Dates, Times, and Durations

1. op:dateTime-equal

The following schemata for comparison operators are defined analogously with respect to their corresponding functions and possible error codesoperators as defined in XQuery 1.0 and XPath 2.0 Functions and Operators . Editor's remark: Where in XQuery 1.0 and XPath 2.0 Functions and Operators are the errors for these functions defined? We slightly deviate here from the original definition of fn:year-from-dateTime which says: "If ?arg is the empty sequence, returns the empty sequence." We have no terminology of "sequence". Editor's remark: I am not sure whether this[XPath-Functions], where the intended domain for both arguments is a problem. Doimplicit by the operator name and we have to deal with empty sequences?only give additional details on intended domains and mapping as needed.

2. fn:month-from-dateTime ( ?argop:dateTime-less-than

3. fn:day-from-dateTime ( ?argop:dateTime-greater-than

4. fn:hours-from-dateTime ( ?argop:date-equal

5. fn:minutes-from-dateTime ( ?argop:date-less-than

6. fn:seconds-from-dateTime ( ?argop:date-greater-than

7. fn:year-from-date ( ?argop:time-equal

8. fn:month-from-date ( ?argop:time-less-than

9. fn:day-from-date ( ?argop:time-greater-than

10. fn:hours-from-time ( ?argop:duration-equal

11. fn:minutes-from-time ( ?argop:dayTimeDuration-less-than

12. fn:seconds-from-time ( ?argop:dayTimeDuration-greater-than

4.6 Functions and Predicates on rif:XMLLiterals We support (though not impose) an XPath built-in function, applied to XMLLiterals as follows. (?xml ?xquery; func:evalXQuery( ?xml ?xquery)13. op:yearMonthDuration-less-than

14. op:yearMonthDuration-greater-than

15. pred:dateTime-less-than-or-equal

16. pred:dateTime-greater-than-or-equal

17. pred:date-less-than-or-equal

18. pred:date-greater-than-or-equal

19. pred:time-less-than-or-equal

20. pred:time-greater-than-or-equal

Editor's note: No other error asless-than-or-equal or greater-than-or-equal predicates are defined in XQuery applies, the error err:XQTY0028. Editor's remark:this draft for durations, since the error code err:XQTY0028 is currently unused.there are no separate equals predicates for yearMonthDuration and dayTimeDuration in [XPath-Functions]. Future version of this working draft may resolve this by introducing separate equality predicates pred:dayTimeDuration-equal and pred:yearMonthDuration-equal with restricted intended domains.


4.7 Functions and Predicates on rif:text

(?arg ; func:lang( ?argThe following function serves to extract the language tag from values in the rif:text value space.

5 References

[CURIE]
CURIE Syntax 1.0: A syntax for expressing Compact URIs, Mark Birbeck, Shane McCarron. W3C Working Draft 2 April 2008. Available at http://www.w3.org/TR/curie/.

[RDF-CONCEPTS]
Resource Description Framework (RDF): Concepts and Abstract Syntax, Klyne G., Carroll J. (Editors), W3C Recommendation, 10 February 2004, http://www.w3.org/TR/2004/REC-rdf-concepts-20040210/. Latest version available at http://www.w3.org/TR/rdf-concepts/.

[RDF-SEMANTICS]
RDF Semantics, Patrick Hayes, Editor, W3C Recommendation, 10 February 2004, http://www.w3.org/TR/2004/REC-rdf-mt-20040210/. Latest version available at http://www.w3.org/TR/rdf-mt/.

[RDF-SCHEMA]
RDF Vocabulary Description Language 1.0: RDF Schema, Brian McBride, Editor, W3C Recommendation 10 February 2004, http://www.w3.org/TR/2004/REC-rdf-schema-20040210/. Latest version available at http://www.w3.org/TR/rdf-schema/.

[RFC-3066]
RFC 3066 - Tags for the Identification of Languages, H. Alvestrand, IETF, January 2001. This document is at2001, http://www.isi.edu/in-notes/rfc3066.txt.

[RFC-3987]
RFC 3987 - Internationalized Resource Identifiers (IRIs), M. Duerst and M. Suignard, IETF, January 2005.2005, http://www.ietf.org/rfc/rfc3987.txt.

[SPARQL]
SPARQL Query Language for RDF, W3C Recommendation, World Wide Web Consortium, 12 January 2008, http://www.w3.org/TR/2008/REC-rdf-sparql-query-20080115/. Latest version available at http://www.w3.org/TR/rdf-sparql-query/.

[XDM]
XQuery 1.0 and XPath 2.0 Data Model (XDM), W3C Recommendation, World Wide Web Consortium, 23 January 2007. This documentversion is http://www.w3.org/TR/2007/REC-xpath-datamodel-20070123/. Latest version available at http://www.ietf.org/rfc/rfc3987.txthttp://www.w3.org/TR/xpath-datamodel/.

[XML-NS]
Namespaces in XML 1.1 (Second Edition), W3C Recommendation, World Wide Web Consortium, 16 August 2006, http://www.w3.org/TR/2006/REC-xml-names11-20060816. Latest version available at http://www.w3.org/TR/xml-names11.

[XML-SCHEMA2]
XML Schema Part 2: Datatypes, W3C Recommendation, World Wide Web Consortium, 2 May 2001. This version is2001, http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/. TheLatest version isavailable at http://www.w3.org/TR/xmlschema-2/.

[XPath-Functions]
XQuery 1.0 and XPath 2.0 Functions and Operators, W3C Recommendation, World Wide Web Consortium, 23 January 2007, http://www.w3.org/TR/2007/REC-xpath-functions-20070123/. Latest version available at http://www.w3.org/TR/xpath-functions/.

6 Appendix: Schemas for Externally Defined Terms

This section is an edited copy of a section from RIF Framework for Logic Dialects. It is reproduced here for convenience of the reader of the RIF-BLD document who might not be familiar with RIF-FLD.

This section defines external schemas, which serve as templates for externally defined terms. These schemas determine which externally defined terms are acceptable in a RIF dialect. Externally defined terms include RIF built-ins, but are more general. They are designed to also accommodate the ideas of procedural attachments and querying of external data sources. Because of the need to accommodate many difference possibilities, the RIF logical framework supports a very general notion of an externally defined term. Such a term is not necessarily a function or a predicate -- it can be a frame, a classification term, and so on.

Definition (Schema for external term). An external schema is a statement of the form (?X1 ... ?Xn; τ) where

The names of the variables in an external schema are immaterial, but their order is important. For instance, (?X ?Y;  ?X[foo->?Y]) and (?V ?W;  ?V[foo->?W]) are considered to be the same schema, but (?X ?Y;  ?X[foo->?Y]) and (?Y ?X;  ?X[foo->?Y]) are viewed as different schemas.

A term t is an instance of an external schema (?X1 ... ?Xn; τ) iff t can be obtained from τ by a simultaneous substitution ?X1/s1 ... ?Xn/sn of the variables ?X1 ... ?Xn with terms s1 ... sn, respectively. Some of the terms si can be variables themselves. For example, ?Z[foo->f(a ?P)] is an instance of (?X ?Y; ?X[foo->?Y]) by the substitution ?X/?Z  ?Y/f(a ?P).    ☐

Observe that a variable cannot be an instance of an external schema, since τ in the above definition cannot be a variable. It will be seen later that this implies that a term of the form External(?X) is not well-formed in RIF.

The intuition behind the notion of an external schema, such as (?X ?Y;  ?X["foo"^^xsd:string->?Y]) or (?V;  "pred:isTime"^^rif:iri(?V)), is that ?X["foo"^^xsd:string->?Y] or "pred:isTime"^^rif:iri(?V) are invocation patterns for querying external sources, and instances of those schemas correspond to concrete invocations. Thus, External("http://foo.bar.com"^^rif:iri["foo"^^xsd:string->"123"^^xsd:integer]) and External("pred:isTime"^^rif:iri("22:33:44"^^xsd:time) are examples of invocations of external terms -- one querying an external source and another invoking a built-in.


Definition (Coherent set of external schemas). A set of external schemas is coherent if there can be no term, t, that is an instance of two distinct schemas.    ☐

The intuition behind this notion is to ensure that any use of an external term is associated with at most one external schema. This assumption is relied upon in the definition of the semantics of externally defined terms. Note that the coherence condition is easy to verify syntactically and that it implies that schemas like (?X ?Y;  ?X[foo->?Y]) and (?Y ?X;  ?X[foo->?Y]), which differ only in the order of their variables, cannot be in the same coherent set.

It important to understand that external schemas are not part of the language in RIF, since they do not appear anywhere in RIF statements. Instead, they are best thought of as part of the grammar of the language.