Package com.hp.hpl.jena.sparql.expr

Examples of com.hp.hpl.jena.sparql.expr.ValueSpaceClassification


    private static final String dtXSDdayTimeDuration    = XSD+"#dayTimeDuration" ;
    private static final String dtXSDyearMonthDuration  = XSD+"#yearMonthDuration" ;

    public static NodeValue additionNV(NodeValue nv1, NodeValue nv2)
    {
        ValueSpaceClassification vs1 = nv1.getValueSpace() ;
        ValueSpaceClassification vs2 = nv2.getValueSpace() ;
       
        if ( vs1.equals(VSPACE_NUM) && vs2.equals(VSPACE_NUM) )
            return XSDFuncOp.numAdd(nv1, nv2) ;
       
        if ( vs1.equals(VSPACE_STRING) && vs2.equals(VSPACE_STRING) )
            return NodeValue.makeString(nv1.asString()+nv2.asString()) ;
        if ( vs1.equals(VSPACE_DURATION) && vs2.equals(VSPACE_DURATION) )
        {
            // A lot of testing to keep it as derived types.
            boolean isDTDur = dtXSDdayTimeDuration.equals(nv1.getDatatypeURI()) &&
                              dtXSDdayTimeDuration.equals(nv2.getDatatypeURI()) ;
            boolean isYMDur = dtXSDyearMonthDuration.equals(nv1.getDatatypeURI()) &&
                              dtXSDyearMonthDuration.equals(nv2.getDatatypeURI()) ;
            Duration d3 = nv1.getDuration().add(nv2.getDuration()) ;
            String lex = d3.toString() ;
            Node n ;
            if ( isDTDur )
                n = NodeFactory.createLiteralNode(lex, null, dtXSDdayTimeDuration) ;
            else if ( isYMDur )
                n = NodeFactory.createLiteralNode(lex, null, dtXSDyearMonthDuration) ;
            else
                n = Node.createLiteral(lex, XSDDatatype.XSDduration) ;
            return NodeValue.makeNodeDuration(d3, n) ;
        }
       
        // Loose style. Add any duration to any date or time value.
        if ( vs1.equals(VSPACE_DATETIME) && vs2.equals(VSPACE_DURATION) )
        {
            XMLGregorianCalendar cal = nv1.getDateTime() ;
            XMLGregorianCalendar result = xsd_add(cal, nv2.getDuration()) ;
            NodeValue r = NodeValue.makeDateTime(result) ;
            return r ;
        }
        // Loose style. Add any duration to any date or time value.
        if ( vs1.equals(VSPACE_DATE) && vs2.equals(VSPACE_DURATION) )
        {
            XMLGregorianCalendar cal = nv1.getDateTime() ;
            XMLGregorianCalendar result = xsd_add(cal, nv2.getDuration()) ;
            NodeValue r = NodeValue.makeDate(result) ;
            return r ;
        }
        // Loose style. Add any duration to any date or time value.
        if ( vs1.equals(VSPACE_TIME) && vs2.equals(VSPACE_DURATION) )
        {
            // ONLY dayTime.
            XMLGregorianCalendar cal = nv1.getDateTime() ;
            XMLGregorianCalendar result = xsd_add(cal, nv2.getDuration()) ;
            NodeValue r = NodeValue.makeNode(result.toXMLFormat(), XSDDatatype.XSDtime) ;
View Full Code Here


    }

    // NodeFunctions
    public static NodeValue subtractionNV(NodeValue nv1, NodeValue nv2)
    {
        ValueSpaceClassification vs1 = nv1.getValueSpace() ;
        ValueSpaceClassification vs2 = nv2.getValueSpace() ;
       
        if ( vs1.equals(VSPACE_NUM) && vs2.equals(VSPACE_NUM) )
            return XSDFuncOp.numSubtract(nv1, nv2) ;
       
        if ( vs1.equals(VSPACE_DURATION) && vs2.equals(VSPACE_DURATION) )
        {
         // A lot of testing to keep it as derived types.
            boolean isDTDur = dtXSDdayTimeDuration.equals(nv1.getDatatypeURI()) &&
                              dtXSDdayTimeDuration.equals(nv2.getDatatypeURI()) ;
            boolean isYMDur = dtXSDyearMonthDuration.equals(nv1.getDatatypeURI()) &&
                              dtXSDyearMonthDuration.equals(nv2.getDatatypeURI()) ;
            Duration d3 = nv1.getDuration().subtract(nv2.getDuration()) ;
            String lex = d3.toString() ;
            Node n ;
            if ( isDTDur )
                n = NodeFactory.createLiteralNode(lex, null, dtXSDdayTimeDuration) ;
            else if ( isYMDur )
                n = NodeFactory.createLiteralNode(lex, null, dtXSDyearMonthDuration) ;
            else
                n = Node.createLiteral(lex, XSDDatatype.XSDduration) ;
            return NodeValue.makeNodeDuration(d3, n) ;
        }
       
        if ( isDT(vs1) && isDT(vs2) )
        {
            XMLGregorianCalendar cal1 = nv1.getDateTime() ;
            XMLGregorianCalendar cal2 = nv2.getDateTime() ;
            boolean isDef1 = ( cal1.getTimezone() == FIELD_UNDEFINED ) ;
            boolean isDef2 = ( cal2.getTimezone() == FIELD_UNDEFINED ) ;
            if ( ( isDef1 && !isDef2 ) || ( !isDef1 && isDef2 ) )
                throw new ExprEvalTypeException("Operator '-': can't substract timezone/non-timezone values") ;
            // Inspect duration and force to better type? xsd:dayTimeDuration
            return NodeValue.makeDuration(xsd_substract(cal1, cal2));
        }
       
        // Loose style. Subtract any duration to any date or time value.
        if ( vs1.equals(VSPACE_DATETIME) && vs2.equals(VSPACE_DURATION) )
        {
            XMLGregorianCalendar cal = nv1.getDateTime() ;
            // add-negation
            XMLGregorianCalendar result = xsd_subtract(cal, nv2.getDuration()) ;
            NodeValue r = NodeValue.makeDateTime(result) ;
            return r ;
        }
        if ( vs1.equals(VSPACE_DATE) && vs2.equals(VSPACE_DURATION) )
        {
            XMLGregorianCalendar cal = nv1.getDateTime() ;
            // add-negation
            XMLGregorianCalendar result = xsd_subtract(cal, nv2.getDuration()) ;
            NodeValue r = NodeValue.makeDate(result) ;
            return r ;
        }
        if ( vs1.equals(VSPACE_TIME) && vs2.equals(VSPACE_DURATION) )
        {
            XMLGregorianCalendar cal = nv1.getDateTime() ;
            // add-negation
            XMLGregorianCalendar result = xsd_subtract(cal, nv2.getDuration()) ;
            NodeValue r = NodeValue.makeNode(result.toXMLFormat(), XSDDatatype.XSDtime) ;
View Full Code Here

        throw new ExprEvalTypeException("Operator '-' : Undefined subtraction: "+nv1+" and "+nv2) ;
    }

    public static NodeValue multiplicationNV(NodeValue nv1, NodeValue nv2)
    {
        ValueSpaceClassification vs1 = nv1.getValueSpace() ;
        ValueSpaceClassification vs2 = nv2.getValueSpace() ;
       
        if ( vs1.equals(VSPACE_NUM) && vs2.equals(VSPACE_NUM) )
            return XSDFuncOp.numMultiply(nv1, nv2) ;

        if ( vs1.equals(VSPACE_DURATION) && vs2.equals(VSPACE_NUM) )
        {
            // ONLY defined for dayTime.
            Duration dur = nv1.getDuration() ;
            boolean valid = XSDFuncOp.isDayTime(dur) ;
            if ( ! valid )
View Full Code Here

        throw new ExprEvalTypeException("Operator '*' : Undefined multiply: "+nv1+" and "+nv2) ;
    }
   
    public static NodeValue divisionNV(NodeValue nv1, NodeValue nv2)
    {
        ValueSpaceClassification vs1 = nv1.getValueSpace() ;
        ValueSpaceClassification vs2 = nv2.getValueSpace() ;
       
        if ( vs1.equals(VSPACE_NUM) && vs2.equals(VSPACE_NUM) )
            return XSDFuncOp.numDivide(nv1, nv2) ;

        throw new ExprEvalTypeException("Operator '/' : Undefined division: "+nv1+" and "+nv2) ;
    }
View Full Code Here

    public static boolean sameAs(NodeValue nv1, NodeValue nv2)
    {
        if ( nv1 == null || nv2 == null )
            throw new ARQInternalErrorException("Attempt to sameValueAs on a null") ;
       
        ValueSpaceClassification compType = classifyValueOp(nv1, nv2) ;
       
        // Special case - date/dateTime comparison is affected by timezones and may be
        // interdeterminate based on the value of the dateTime/date.

        switch (compType)
View Full Code Here

        if ( nv1 == null )
            return Expr.CMP_LESS ;
        if ( nv2 == null )
            return Expr.CMP_GREATER ;
       
        ValueSpaceClassification compType = classifyValueOp(nv1, nv2) ;
       
        // Special case - date/dateTime comparison is affected by timezones and may be
        // interdeterminate based on the value of the dateTime/date.
        // Do this first,
       
View Full Code Here

        throw new ARQInternalErrorException("Compare failure "+nv1+" and "+nv2) ;
    }

    public static ValueSpaceClassification classifyValueOp(NodeValue nv1, NodeValue nv2)
    {
        ValueSpaceClassification c1 = nv1.getValueSpace() ;
        ValueSpaceClassification c2 = nv2.getValueSpace() ;
        if ( c1 == c2 ) return c1 ;
        if ( c1 == VSPACE_UNKNOWN || c2 == VSPACE_UNKNOWN )
            return VSPACE_UNKNOWN ;
       
        // Known values spaces but incompatible 
View Full Code Here

    private static final String dtXSDdayTimeDuration    = XSD+"#dayTimeDuration" ;
    private static final String dtXSDyearMonthDuration  = XSD+"#yearMonthDuration" ;

    public static NodeValue additionNV(NodeValue nv1, NodeValue nv2)
    {
        ValueSpaceClassification vs1 = nv1.getValueSpace() ;
        ValueSpaceClassification vs2 = nv2.getValueSpace() ;
       
        if ( vs1.equals(VSPACE_NUM) && vs2.equals(VSPACE_NUM) )
            return XSDFuncOp.numAdd(nv1, nv2) ;
       
        if ( vs1.equals(VSPACE_STRING) && vs2.equals(VSPACE_STRING) )
            return NodeValue.makeString(nv1.asString()+nv2.asString()) ;
        if ( vs1.equals(VSPACE_DURATION) && vs2.equals(VSPACE_DURATION) )
        {
            // A lot of testing to keep it as derived types.
            boolean isDTDur = dtXSDdayTimeDuration.equals(nv1.getDatatypeURI()) &&
                              dtXSDdayTimeDuration.equals(nv2.getDatatypeURI()) ;
            boolean isYMDur = dtXSDyearMonthDuration.equals(nv1.getDatatypeURI()) &&
                              dtXSDyearMonthDuration.equals(nv2.getDatatypeURI()) ;
            Duration d3 = nv1.getDuration().add(nv2.getDuration()) ;
            String lex = d3.toString() ;
            Node n ;
            if ( isDTDur )
                n = NodeFactoryExtra.createLiteralNode(lex, null, dtXSDdayTimeDuration) ;
            else if ( isYMDur )
                n = NodeFactoryExtra.createLiteralNode(lex, null, dtXSDyearMonthDuration) ;
            else
                n = com.hp.hpl.jena.graph.NodeFactory.createLiteral(lex, XSDDatatype.XSDduration) ;
            return NodeValue.makeNodeDuration(d3, n) ;
        }
       
        // Loose style. Add any duration to any date or time value.
        if ( vs1.equals(VSPACE_DATETIME) && vs2.equals(VSPACE_DURATION) )
        {
            XMLGregorianCalendar cal = nv1.getDateTime() ;
            XMLGregorianCalendar result = xsd_add(cal, nv2.getDuration()) ;
            NodeValue r = NodeValue.makeDateTime(result) ;
            return r ;
        }
        // Loose style. Add any duration to any date or time value.
        if ( vs1.equals(VSPACE_DATE) && vs2.equals(VSPACE_DURATION) )
        {
            XMLGregorianCalendar cal = nv1.getDateTime() ;
            XMLGregorianCalendar result = xsd_add(cal, nv2.getDuration()) ;
            NodeValue r = NodeValue.makeDate(result) ;
            return r ;
        }
        // Loose style. Add any duration to any date or time value.
        if ( vs1.equals(VSPACE_TIME) && vs2.equals(VSPACE_DURATION) )
        {
            // ONLY dayTime.
            XMLGregorianCalendar cal = nv1.getDateTime() ;
            XMLGregorianCalendar result = xsd_add(cal, nv2.getDuration()) ;
            NodeValue r = NodeValue.makeNode(result.toXMLFormat(), XSDDatatype.XSDtime) ;
View Full Code Here

    }

    // NodeFunctions
    public static NodeValue subtractionNV(NodeValue nv1, NodeValue nv2)
    {
        ValueSpaceClassification vs1 = nv1.getValueSpace() ;
        ValueSpaceClassification vs2 = nv2.getValueSpace() ;
       
        if ( vs1.equals(VSPACE_NUM) && vs2.equals(VSPACE_NUM) )
            return XSDFuncOp.numSubtract(nv1, nv2) ;
       
        if ( vs1.equals(VSPACE_DURATION) && vs2.equals(VSPACE_DURATION) )
        {
         // A lot of testing to keep it as derived types.
            boolean isDTDur = dtXSDdayTimeDuration.equals(nv1.getDatatypeURI()) &&
                              dtXSDdayTimeDuration.equals(nv2.getDatatypeURI()) ;
            boolean isYMDur = dtXSDyearMonthDuration.equals(nv1.getDatatypeURI()) &&
                              dtXSDyearMonthDuration.equals(nv2.getDatatypeURI()) ;
            Duration d3 = nv1.getDuration().subtract(nv2.getDuration()) ;
            String lex = d3.toString() ;
            Node n ;
            if ( isDTDur )
                n = NodeFactoryExtra.createLiteralNode(lex, null, dtXSDdayTimeDuration) ;
            else if ( isYMDur )
                n = NodeFactoryExtra.createLiteralNode(lex, null, dtXSDyearMonthDuration) ;
            else
                n = com.hp.hpl.jena.graph.NodeFactory.createLiteral(lex, XSDDatatype.XSDduration) ;
            return NodeValue.makeNodeDuration(d3, n) ;
        }
       
        if ( isDT(vs1) && isDT(vs2) )
        {
            XMLGregorianCalendar cal1 = nv1.getDateTime() ;
            XMLGregorianCalendar cal2 = nv2.getDateTime() ;
            boolean isDef1 = ( cal1.getTimezone() == FIELD_UNDEFINED ) ;
            boolean isDef2 = ( cal2.getTimezone() == FIELD_UNDEFINED ) ;
            if ( ( isDef1 && !isDef2 ) || ( !isDef1 && isDef2 ) )
                throw new ExprEvalTypeException("Operator '-': can't substract timezone/non-timezone values") ;
            // Inspect duration and force to better type? xsd:dayTimeDuration
            return NodeValue.makeDuration(xsd_substract(cal1, cal2));
        }
       
        // Loose style. Subtract any duration to any date or time value.
        if ( vs1.equals(VSPACE_DATETIME) && vs2.equals(VSPACE_DURATION) )
        {
            XMLGregorianCalendar cal = nv1.getDateTime() ;
            // add-negation
            XMLGregorianCalendar result = xsd_subtract(cal, nv2.getDuration()) ;
            NodeValue r = NodeValue.makeDateTime(result) ;
            return r ;
        }
        if ( vs1.equals(VSPACE_DATE) && vs2.equals(VSPACE_DURATION) )
        {
            XMLGregorianCalendar cal = nv1.getDateTime() ;
            // add-negation
            XMLGregorianCalendar result = xsd_subtract(cal, nv2.getDuration()) ;
            NodeValue r = NodeValue.makeDate(result) ;
            return r ;
        }
        if ( vs1.equals(VSPACE_TIME) && vs2.equals(VSPACE_DURATION) )
        {
            XMLGregorianCalendar cal = nv1.getDateTime() ;
            // add-negation
            XMLGregorianCalendar result = xsd_subtract(cal, nv2.getDuration()) ;
            NodeValue r = NodeValue.makeNode(result.toXMLFormat(), XSDDatatype.XSDtime) ;
View Full Code Here

        throw new ExprEvalTypeException("Operator '-' : Undefined subtraction: "+nv1+" and "+nv2) ;
    }

    public static NodeValue multiplicationNV(NodeValue nv1, NodeValue nv2)
    {
        ValueSpaceClassification vs1 = nv1.getValueSpace() ;
        ValueSpaceClassification vs2 = nv2.getValueSpace() ;
       
        if ( vs1.equals(VSPACE_NUM) && vs2.equals(VSPACE_NUM) )
            return XSDFuncOp.numMultiply(nv1, nv2) ;

        if ( vs1.equals(VSPACE_DURATION) && vs2.equals(VSPACE_NUM) )
        {
            // ONLY defined for dayTime.
            Duration dur = nv1.getDuration() ;
            boolean valid = XSDFuncOp.isDayTime(dur) ;
            if ( ! valid )
View Full Code Here

TOP

Related Classes of com.hp.hpl.jena.sparql.expr.ValueSpaceClassification

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.