public static boolean isliteral(final Object arg) { return toRDF(arg) instanceof Literal; }
public static boolean isiri(final Object arg) { return toRDF(arg) instanceof URI; }
public static boolean isblank(final Object arg) { return toRDF(arg) instanceof BNode; }
public static String lang(final Object arg) { final Value value = toRDF(arg); if (value instanceof Literal) { final String lang = ((Literal) value).getLanguage(); return lang == null ? "" : lang; } throw new IllegalArgumentException("lang() argument is not a literal"); }
public static String str(final Object arg) { final Value value = toRDF(arg); if (value instanceof URI || value instanceof Literal) { return value.stringValue(); } throw new IllegalArgumentException("str() argument is not an URI or literal"); }
public static Value evaluate(final Function function, final Object... args) { final Value[] values = new Value[args.length]; for (int i = 0; i < args.length; i++) { values[i] = toRDF(args[i]); } try { return function.evaluate(Statements.VALUE_FACTORY, values); } catch (final ValueExprEvaluationException ex) { throw new IllegalArgumentException(ex); } }
public static boolean langmatches(final Object languageTag, final Object languageRange) { final Value tagValue = toRDF(languageTag); final Value rangeValue = toRDF(languageRange); if (QueryEvaluationUtil.isSimpleLiteral(tagValue) && QueryEvaluationUtil.isSimpleLiteral(rangeValue)) { final String tag = ((Literal) tagValue).getLabel(); final String range = ((Literal) rangeValue).getLabel(); if (range.equals("*")) { return tag.length() > 0; } else if (tag.length() == range.length()) { return tag.equalsIgnoreCase(range); } else if (tag.length() > range.length()) { final String prefix = tag.substring(0, range.length()); return prefix.equalsIgnoreCase(range) && tag.charAt(range.length()) == '-'; } else { return false; } } throw new IllegalArgumentException("LANGMATCHES() cannot be applied to " + languageTag + ", " + languageRange); }
public static boolean isnumeric(final Object arg) { final Value value = toRDF(arg); if (value instanceof Literal) { final URI datatype = ((Literal) value).getDatatype(); return XMLDatatypeUtil.isNumericDatatype(datatype); } return false; }
public static URI datatype(final Object arg) { final Value value = toRDF(arg); if (value instanceof Literal) { final Literal literal = (Literal) value; final URI datatype = literal.getDatatype(); if (datatype != null) { return datatype; } else if (literal.getLanguage() != null) { return RDF.LANGSTRING; } else { return XMLSchema.STRING; } } throw new IllegalArgumentException("datatype() argument is not a literal"); }