public static int compareBoolean(NodeValue nv1, NodeValue nv2) { boolean b1 = nv1.getBoolean() ; boolean b2 = nv2.getBoolean() ; if ( b1 == b2 ) return Expr.CMP_EQUAL ; if ( !b1 && b2 ) return Expr.CMP_LESS ; if ( b1 && !b2 ) return Expr.CMP_GREATER ; throw new ARQInternalErrorException("Weird boolean comparison: " + nv1 + ", " + nv2) ; }
@Override public NodeValue eval(NodeValue x, NodeValue y) { // Evaluation only happens as part of copySubstitute. // Proper evaluation is a special form as above. if ( ! x.isBoolean() ) throw new ExprEvalException("Not a boolean: "+x) ; if ( ! y.isBoolean() ) throw new ExprEvalException("Not a boolean: "+y) ; boolean boolX = x.getBoolean() ; boolean boolY = y.getBoolean() ; return NodeValue.makeBoolean( boolX && boolY ) ; }
@Override public NodeValue eval(NodeValue x, NodeValue y) { // Evaluation only happens as part of copySubstitute. // Proper evaluation is a special form as above. if ( ! x.isBoolean() ) throw new ExprEvalException("Not a boolean: "+x) ; if ( ! y.isBoolean() ) throw new ExprEvalException("Not a boolean: "+y) ; boolean boolX = x.getBoolean() ; boolean boolY = y.getBoolean() ; return NodeValue.makeBoolean( boolX || boolY ) ; }
@Override public boolean apply(Quad quad) { Binding binding = QuadUtils.quadToBinding(quad); NodeValue tmp = expr.eval(binding, FunctionEnvBase.createTest()); boolean result = tmp.isBoolean() ? tmp.getBoolean() : true; return result; } }
public Boolean determineSatisfiability(Expr expr) { /* BindingMap bindingMap = new BindingMap(); for(Entry<Var, Node> entry : binding.entrySet()) { bindingMap.add(entry.getKey(), entry.getValue()); }*/ if(binding.keySet().containsAll(expr.getVarsMentioned())) { try { NodeValue value = ExprUtils.eval(expr, bindingMap); return value.getBoolean(); } catch(Exception e) { // Evaluation of the expression failed despite all variables were bound // Satisfiability unknown System.err.println(e); return null; } } else if(expr instanceof E_LogicalNot) { Boolean tmp = determineSatisfiability(((E_LogicalNot)expr).getArg()); return tmp == null ? null : !tmp; } else if(expr instanceof E_Equals) { E_Equals e = (E_Equals)expr; RestrictionSetImpl a = getRestriction(e.getArg1()); RestrictionSetImpl b = getRestriction(e.getArg2()); return determineSatisfiabilityEquals(a, b); } else { return null; } }
/** {@literal F&O} fn:boolean */ public static boolean booleanEffectiveValue(NodeValue nv) { // Apply the "boolean effective value" rules // boolean: value of the boolean (strictly, if derived from xsd:boolean) // plain literal: lexical form length(string) > 0 // numeric: number != Nan && number != 0 // http://www.w3.org/TR/xquery/#dt-ebv if ( nv.isBoolean() ) return nv.getBoolean() ; if ( nv.isString() || nv.isLangString() ) // Plain literals. return ! nv.getString().isEmpty() ; if ( nv.isInteger() ) return !nv.getInteger().equals(BigInteger.ZERO) ; if ( nv.isDecimal() ) return !nv.getDecimal().equals(BigDecimal.ZERO) ; if ( nv.isDouble() ) return nv.getDouble() != 0.0 ; NodeValue.raise(new ExprEvalException("Not a boolean effective value (wrong type): " + nv)) ; // Does not return return false ; }
@Test public void testEBV2() { assertTrue("Not a boolean", NodeValue.FALSE.isBoolean()); assertFalse("Not false", NodeValue.FALSE.getBoolean()); assertFalse("Not false", XSDFuncOp.booleanEffectiveValue(NodeValue.FALSE)); }
public void regexTest(String value, String pattern, String flags, boolean expected) { Expr s = NodeValue.makeString(value) ; E_Regex r = new E_Regex(s, pattern, flags) ; NodeValue nv = r.eval(BindingFactory.binding(), null) ; boolean b = nv.getBoolean() ; if ( b != expected ) fail(fmtTest(value, pattern, flags)+" ==> "+b+" expected "+expected) ; }
private static void testBoolean(String string, boolean b, Binding env) { Expr expr = parse(string) ; NodeValue v = expr.eval( env, new FunctionEnvBase()) ; assertTrue(v.isBoolean()) ; assertEquals(b, v.getBoolean()) ; }
@Test public void testEBV1() { assertTrue("Not a boolean", NodeValue.TRUE.isBoolean()); assertTrue("Not true", NodeValue.TRUE.getBoolean()); assertTrue("Not true", XSDFuncOp.booleanEffectiveValue(NodeValue.TRUE)); }
@Test public void testNodeBool3() { NodeValue v = NodeValue.makeBoolean(true); assertTrue("Not a boolean: " + v, v.isBoolean()); // assertTrue("Not a node: "+v, v.hasNode()) ; assertTrue("Not true: " + v, v.getBoolean()); assertTrue("Not true: " + v, XSDFuncOp.booleanEffectiveValue(v)); }
@Test public void testNodeBool2() { NodeValue v = NodeValue.makeNode("false", XSDDatatype.XSDboolean); assertTrue("Not a boolean: " + v, v.isBoolean()); assertTrue("Not a node: " + v, v.hasNode()); assertFalse("Satisfied: " + v, v.getBoolean()); }
@Test public void testEBV5() { NodeValue v = NodeValue.makeString("xyz"); assertFalse("It's a boolean: " + v, v.isBoolean()); // assertTrue("Not a node: "+v, v.hasNode()) ; try { v.getBoolean(); fail("getBoolean should fail"); } catch (ExprEvalException e) {} assertTrue("Not EBV true: " + v, XSDFuncOp.booleanEffectiveValue(v)); }
@Test public void testEBV6() { NodeValue v = NodeValue.makeString(""); assertFalse("It's a boolean: " + v, v.isBoolean()); try { v.getBoolean(); fail("getBoolean should fail"); } catch (ExprEvalException e) {} assertFalse("Not EBV false: " + v, XSDFuncOp.booleanEffectiveValue(v)); }
/** * Map an ARQ {@link NodeValue} to java/Nashorn representation of a JavaScript object. * Native JavaScript types supported are null, string, number and boolean. * Otherwise a {@link NV} is returned. */ public static Object fromNodeValue(NodeValue nv) { if ( nv == null ) return null; if ( nv.isString() ) return nv.getString(); if ( nv.isNumber() ) { if ( nv.isInteger()) return nv.getInteger(); if ( nv.isDecimal() ) return nv.getDecimal(); if ( nv.isDouble() ) return nv.getDouble(); } if ( nv.isBoolean() ) return nv.getBoolean(); return new NV(nv); } /**
@Test public void testNodeBool1() { NodeValue v = NodeValue.makeNode("true", XSDDatatype.XSDboolean); assertTrue("Not a boolean: " + v, v.isBoolean()); assertTrue("Not a node: " + v, v.hasNode()); assertTrue("Not satisfied: " + v, v.getBoolean()); }
@Test public void testNodeBool4() { NodeValue v = NodeValue.makeBoolean(false); assertTrue("Not a boolean: " + v, v.isBoolean()); // assertTrue("Not a node: "+v, v.hasNode()) ; assertFalse("Not false: " + v, v.getBoolean()); assertFalse("Not false: " + v, XSDFuncOp.booleanEffectiveValue(v)); }
@Test public void testEBV4() { NodeValue v = NodeValue.makeInteger(0); assertFalse("It's a boolean: " + v, v.isBoolean()); try { v.getBoolean(); fail("getBoolean should fail"); } catch (ExprEvalException e) {} assertFalse("Not EBV false: " + v, XSDFuncOp.booleanEffectiveValue(v)); }
static Dataset make(Resource root) { if ( !exactlyOneProperty(root, pLocation) ) throw new AssemblerException(root, "No location given") ; String dir = getStringValue(root, pLocation) ; Location loc = Location.create(dir) ; DatasetGraph dsg = TDBFactory.createDatasetGraph(loc) ; if ( root.hasProperty(pUnionDefaultGraph) ) { Node b = root.getProperty(pUnionDefaultGraph).getObject().asNode() ; NodeValue nv = NodeValue.makeNode(b) ; if ( nv.isBoolean() ) dsg.getContext().set(TDB.symUnionDefaultGraph, nv.getBoolean()) ; else Log.warn(DatasetAssemblerTDB.class, "Failed to recognize value for union graph setting (ignored): " + b) ; } /* <r> rdf:type tdb:DatasetTDB ; tdb:location "dir" ; //ja:context [ ja:cxtName "arq:queryTimeout" ; ja:cxtValue "10000" ] ; tdb:unionGraph true ; # or "true" */ AssemblerUtils.setContext(root, dsg.getContext()); return DatasetFactory.wrap(dsg) ; }
static Dataset make(Resource root) { if ( !exactlyOneProperty(root, pLocation) ) throw new AssemblerException(root, "No location given") ; String dir = getStringValue(root, pLocation) ; Location loc = Location.create(dir) ; DatasetGraph dsg = DatabaseMgr.connectDatasetGraph(loc) ; if ( root.hasProperty(pUnionDefaultGraph) ) { Node b = root.getProperty(pUnionDefaultGraph).getObject().asNode() ; NodeValue nv = NodeValue.makeNode(b) ; if ( nv.isBoolean() ) dsg.getContext().set(TDB2.symUnionDefaultGraph, nv.getBoolean()) ; else Log.warn(DatasetAssemblerTDB.class, "Failed to recognize value for union graph setting (ignored): " + b) ; } /* <r> rdf:type tdb:DatasetTDB2 ; tdb:location "dir" ; //ja:context [ ja:cxtName "arq:queryTimeout" ; ja:cxtValue "10000" ] ; tdb:unionGraph true ; # or "true" */ AssemblerUtils.setContext(root, dsg.getContext()); return DatasetFactory.wrap(dsg) ; }