@Override public NodeValue exec(NodeValue v) { // http://www.w3.org/TR/xpath-functions/#casting String s = null; Node n = v.asNode(); if (n.isBlank()) throw new ExprEvalException("CastXSD: Can't cast blank nodes: " + v); if (n.isURI()) { if (castType.equals(XSDDatatype.XSDstring)) s = n.getURI(); else throw new ExprEvalException( "CastXSD: Can't cast node: " + v + " to " + castType.getURI()); } else if (n.isLiteral()) // What if there is a lang tag? s = n.getLiteralLexicalForm(); else throw new ExprEvalException( "CastXSD: Can't cast node: " + v + "(not a literal, not URI to string)"); if (s == null && v.isString()) s = v.getString(); if (s == null) throw new ExprEvalException("CastXSD: Can't cast: " + v + "(has no string appearance)"); // // Special case - non-normalised xsd:booleans use 0 and 1. // if ( v.isBoolean() ) // { // if ( s.equals("0") ) s = "false" ; // if ( s.equals("1") ) s = "true" ; // } NodeValue r = cast(s, v, castType); return r; }
protected NodeValue cast(String s, NodeValue nv, XSDDatatype castType2) { if (whitespaceSurroundAllowed) // Maybe more convenient, but is not strictly correct. s = s.trim(); else { // Correct mode. No white space allowed around values types numeric, boolean, dateTime, ... // See also "JenaParameters.enableWhitespaceCheckingOfTypedLiterals" which defaults to false // (accept surrounding whitespace) // This CastXSD - not need to check it is an XSD datatype. // if ( castType.getURI().startsWith(XSDDatatype.XSD) && if (castType instanceof XSDBaseNumericType || castType.equals(XSDDatatype.XSDfloat) || castType.equals(XSDDatatype.XSDdouble) || castType.equals(XSDDatatype.XSDboolean) || castType instanceof XSDAbstractDateTimeType) // Includes durations, and Gregorian { if (s.startsWith(" ") || s.endsWith(" ")) throw new ExprEvalException( "CastXSD: Not a valid literal form (has whitespace): '" + s + "'"); } } // Plain cast. try { if (!castType.isValid(s)) throw new ExprEvalException("CastXSD: Not a valid literal form: '" + s + "'"); // Unfortunately, validity testing happens in NodeValue.makeNode as well. // but better error messages this way. return NodeValue.makeNode(s, castType); } catch (RuntimeException ex) { throw new ExprEvalException("CastXSD: Not a strictly valid literal form: '" + s + "'"); } }
public void nullSafeSet(PreparedStatement statement, Object value, int index) throws HibernateException, SQLException { if (value == null) { statement.setNull(index, Types.VARCHAR); } else { XSDDatatype valueXsd = (XSDDatatype) value; String xsdUri = valueXsd.getURI(); xsdUri = xsdUri.replaceAll("http://www.w3.org/2001/XMLSchema#", ""); statement.setString(index, xsdUri); } }
protected NodeValue cast(String s, NodeValue nv, XSDDatatype castType2) { // Plain cast. if (!castType.isValid(s)) throw new ExprEvalException("CastXSD: Not a valid literal form: " + s); // Unfortunately, validity testing happens in NodeValue.makeNode as well. return NodeValue.makeNode(s, castType); }
/** Static initializer. Adds builtin datatypes to the mapper. */ static { theTypeMap = new TypeMapper(); theTypeMap.registerDatatype(XMLLiteralType.theXMLLiteralType); XSDDatatype.loadXSDSimpleTypes(theTypeMap); }