# Core functions - implementation status

This chapter lists all the core functions (functions provided by host lanages such as XSLT are not listed here) along with their implementation status.

The first column of the table gives the function's name, from XQuery 1.0 and XPath 2.0 Functions and Operators. The fn prefix represents the namespace uri http://www.w3.org/2004/10/xpath-functions.

To translate the function name into it's implementation class (which can be found in $GOBO/library/xml/xpath/functions/), remove the leading fn:, uppercase the remaining part of the name, and translate any hyphens into underscores. Then prefix it with XM_XPATH_. For example, the function fn:normalize-space, is implemented by `XM_XPATH_NORMALIZE_SPACE`.

All such classes are descendants of `XM_XPATH_SYSTEM_FUNCTION`. They also each have an entry in `XM_XPATH_SYSTEM_FUNCTION_FACTORY`.

The second column says whether or not the function has been implemented yet. The third column indicates whether there is a testing class set up for the function. If so, it will be in $GOBO/test/xml/xpath/, and will be named xm_xpath_test_<function-name>.e .

The final column gives a link to the W3C draft or recommendation against which the tests have been checked, or "None", if this has not been done.

## Implemented XPath 2.0 core Functions

Table of functions
Name | Implemented? | Tested? | Checked
fn:error | Yes | No | No
fn:trace | No | No | No
fn:node-name | No | No | No
fn:string | Yes | No | No
fn:data | No | No | No
fn:base-uri | No | No | No
fn:document-uri | No | No | No
fn:error | No | No | No
fn:trace | No | No | No
fn:abs | Yes | Yes | No
fn:ceiling | Yes | Yes | No
fn:floor | Yes | Yes | No
fn:round | Yes | Yes | No
fn:round-half-to-even | Yes | Yes | No
fn:codepoints-to-string | No | No | No
fn:string-to-codepoints | No | No | No
fn:compare | Yes | No | No
fn:concat | Yes | No | No
fn:string-join | Yes | No | No
fn:string-length | Yes | No | No
fn:substring | Yes | Incidentally | No
fn:normalize-space | Yes | No | No
fn:normalize-unicode | No | No | No
fn:upper-case | Yes | No | No
fn:lower-case | Yes | No | No
fn:translate | Yes | Incidentally | No
fn:escape-uri | Yes | Ues | No
fn:contains | Yes | Incidentallly | No
fn:starts-with | Yes | No | No
fn:ends-with | Yes | No | No
fn:substring-before | Yes | Incidentally | No
fn:substring-after | Yes | Incidentally | No
fn:matches | Yes (but unicode case stuff not implemented yet) | Yes | No
fn:replace (but unicode case stuff not implemented yet) | Yes | Yes | No
fn:tokenize | Yes (but unicode case stuff not implemented yet) | Partly | No
fn:true | Yes | Only incidentally | No
fn:false | Yes | Only incidentally | No
fn:not | Yes | Only incidentally | No
fn:years-from-yearMonthDuration | No | No | No
fn:months-from-yearMonthDuration | No | No | No
fn:days-from-dayTimeDuration | No | No | No
fn:hours-from-dayTimeDuration | No | No | No
fn:minutes-from-dayTimeDuration | No | No | No
fn:seconds-from-dayTimeDuration | No | No | No
fn:year-from-dateTime | No | No | No
fn:month-from-dateTime | No | No | No
fn:day-from-dateTime | No | No | No
fn:hours-from-dateTime | No | No | No
fn:minutes-from-dateTime | No | No | No
fn:seconds-from-dateTime | No | No | No
fn:timezone-from-dateTime | No | No | No
fn:adjust-dateTime-to-timezone | No | No | No
fn:adjust-date-to-timezone | No | No | No
fn:adjust-time-to-timezone | No | No | No
fn:subtract-dateTimes-yielding-yearMonthDuration | No | No | No
fn:subtract-dateTimes-yielding-dayTimeDuration | No | No | No
fn:resolve-QName | No | No | No
fn:expanded-QName | No | No | No
fn:local-name-from-QName | No | No | No
fn:namespace-uri-from-QName | No | No | No
fn:namespace-uri-for-prefix | Yes | Incidentally | No
fn:in-scope-prefixes | Yes | Incidentally | No
fn:resolve-uri | No | No | No
fn:name | Yes | Only incidentally | No
fn:local-name | Yes | Incidentally | No
fn:namespace-uri | Yes | Incidentally | No
fn:number | Yes | No | No
fn:lang | Yes | Yes | No
fn:root | Yes | Yes | No
fn:zero-or-one | Yes | Yes | No
fn:one-or-more | Yes | Yes | No
fn:exactly-one | Yes | Yes | No
fn:boolean | Yes | No | No
fn:index-of | Yes | Yes | No
fn:empty | Yes | No | No
fn:exists | Yes | No | No
fn:distinct-values | Yes | Yes | No
fn:insert-before | Yes | No | No
fn:remove | Yes | Yes | No
fn:reverse | Yes | Yes | No
fn:subsequence | Yes | No | No
fn:unordered | Yes | No | No
fn:deep-equal | Yes | No | No
fn:count | Yes | No | No
fn:avg | Yes | Yes | No
fn:max | Yes | No | No
fn:min | Yes | No | No
fn:sum | Partially | No | No
fn:id | Partially | No | No
fn:idref | No | No | No
fn:doc | Yes | Yes | No
fn:collection | No | No | No
fn:position | Yes | Only incidentally | No
fn:last | Yes | No | No
fn:current-dateTime | Yes | No | No
fn:current-date | Yes | No | No
fn:current-time | Yes | No | No
fn:default-collation | No | No | No
fn:implicit-timezone | No | No | No