The F+O specification is not always clear about which errors are type errors and which errors are dynamic errors. The distinction affects whether the error can be raised statically, and whether it can be caught using try/catch.
I have taken the liberty of treating this as editorial, and have classified all ambiguous references to errors as either dynamic errors or type errors as appropriate.
In the case of FONS0004 I have changed this from a static error to a dynamic error. (It was previously static because casting from string to QName required the input to be a string literal; we already have a rule that allows such an error to be raised statically if detected statically).