/** {@literal F&O} fn:boolean */ public static NodeValue booleanEffectiveValueAsNodeValue(NodeValue nv) { if ( nv.isBoolean() ) // "Optimization" (saves on object churn) return nv ; return NodeValue.booleanReturn(booleanEffectiveValue(nv)) ; }
@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; } }
/** {@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 js_dt_boolean() { NodeValue nv = eval("rtnBoolean"); assertTrue(nv.isBoolean()); }
@Test public void testEBV3() { NodeValue v = NodeValue.makeInteger(1); assertFalse("It's a boolean: " + v, v.isBoolean()); assertTrue("Not EBV true: " + v, XSDFuncOp.booleanEffectiveValue(v)); }
@Test public void testEBV2() { assertTrue("Not a boolean", NodeValue.FALSE.isBoolean()); assertFalse("Not false", NodeValue.FALSE.getBoolean()); assertFalse("Not false", XSDFuncOp.booleanEffectiveValue(NodeValue.FALSE)); }
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 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)); }
@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)); }
/** * 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) ; }