INode anon = node.getSubnode (propertyName);
INode anon = (INode) node.getChildElement (propertyName);
    public ESValue getNodeProperty (String propertyName) throws EcmaScriptException {	// check for null	if (propertyName == null)	    return ESNull.theNull;	// persistent or persistent capable nodes have a cache property that's a transient node.	// it it hasn't requested before, initialize it now	if ("cache".equalsIgnoreCase (propertyName) && node instanceof Node) {	   cache = node.getCacheNode ();	   if (cacheWrapper == null)	       cacheWrapper = new ESNode (cache, engine);	   else	       cacheWrapper.node = cache;	   return cacheWrapper;	}	if ("subnodeRelation".equalsIgnoreCase (propertyName)) {	    String rel = node.getSubnodeRelation ();	    return rel == null ?  (ESValue) ESNull.theNull :  new ESString (rel);	}	// Everything starting with an underscore is interpreted as internal property	if (propertyName.startsWith ("_"))	    return getInternalProperty (propertyName);             // this _may_ do a relational query if properties are mapped to a relational type.	IProperty p = node.get (propertyName, false);	if (p != null) {	    if (p.getType () == IProperty.STRING) {	        String str = p.getStringValue ();	        if (str == null)	            return ESNull.theNull;	        else	            return new ESString (str);	    }	    if (p.getType () == IProperty.BOOLEAN)	        return ESBoolean.makeBoolean (p.getBooleanValue ());	    if (p.getType () == IProperty.DATE)	        return new DatePrototype (evaluator, p.getDateValue ());	    if (p.getType () == IProperty.INTEGER)	        return new ESNumber ((double) p.getIntegerValue ());	    if (p.getType () == IProperty.FLOAT)	        return new ESNumber (p.getFloatValue ());	    if (p.getType () == IProperty.NODE) {	        INode nd = p.getNodeValue ();	        if (nd == null)	            return ESNull.theNull;	        else	            return engine.getNodeWrapper (nd);	    }	    if (p.getType () == IProperty.JAVAOBJECT)	        return ESLoader.normalizeObject (p.getJavaObjectValue (), evaluator);	}	// as last resort, try to get property as anonymous subnode	INode anon = node.getSubnode (propertyName);	if (anon != null)	    return engine.getNodeWrapper (anon);	return ESNull.theNull;    }