[ 
https://issues.apache.org/jira/browse/JENA-1402?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Greg Albiston updated JENA-1402:
--------------------------------
    Description: 
There is an issue when subtracting two xsd:durations that include:
* decimal seconds
* non-zero minutes
* second operand has a greater number of seconds than the first operand, i.e. 
the minutes are reduced. 

The result is a large number of minutes and incorrect seconds.

For example:
Integer, Larger: "PT2M3S" - "PT1M10S"  = "PT0M53S" CORRECT
Decimal, Smaller: "PT2M3.123S" - "PT1M1.123S" = "PT1M2.000S" CORRECT
Decimal, Larger, Seconds: "PT0M3.123S" - "PT1M10.123S"  = "-PT1M7.000S" CORRECT
Decimal, Larger, Minutes: "PT2M3.123S" - "PT1M10.123S"  = "PT883M0.020S" 
INCORRECT
Decimal, Larger, Hours: "PT1H4M3.123S" - "PT0M10.123S" = "PT1H3883M0.020S" 
INCORRECT

Example SPARQL:

{code:sparql}

SELECT ?res ?op1 ?op2
WHERE{

   VALUES (?op1 ?op2) {
        ("PT2M3S"^^<http://www.w3.org/2001/XMLSchema#duration> 
"PT1M10S"^^<http://www.w3.org/2001/XMLSchema#duration>)
        ("PT2M3.123S"^^<http://www.w3.org/2001/XMLSchema#duration> 
"PT1M1.123S"^^<http://www.w3.org/2001/XMLSchema#duration>)
        ("PT0M3.123S"^^<http://www.w3.org/2001/XMLSchema#duration> 
"PT1M10.123S"^^<http://www.w3.org/2001/XMLSchema#duration>)
        ("PT2M3.123S"^^<http://www.w3.org/2001/XMLSchema#duration> 
"PT1M10.123S"^^<http://www.w3.org/2001/XMLSchema#duration>)
        ("PT1H4M3.123S"^^<http://www.w3.org/2001/XMLSchema#duration> 
"PT0M10.123S"^^<http://www.w3.org/2001/XMLSchema#duration>)
    }

    BIND(?op1 - ?op2 AS ?res)

}

{code}


  was:
There is an issue when subtracting two xsd:durations that include:
* decimal seconds
* non-zero minutes
* second operand has a greater number of seconds than the first operand, i.e. 
the minutes are reduced. 

The result is a large number of minutes and incorrect seconds.

For example:
Integer, Larger: "PT2M3S" - "PT1M10S"  = "PT0M53S" CORRECT
Decimal, Smaller: "PT2M3.123S" - "PT1M1.123S" = "PT1M2.000S" CORRECT
Decimal, Larger, Seconds: "PT0M3.123S" - "PT1M10.123S"  = "-PT1M7.000S" CORRECT
Decimal, Larger, Minutes: "PT2M3.123S" - "PT1M10.123S"  = "PT883M0.020S" 
INCORRECT
Decimal, Larger, Hours: "PT1H4M3.123S" - "PT0M10.123S" = "PT1H3883M0.020S" 
INCORRECT

Example SPARQL:

SELECT ?res ?op1 ?op2
WHERE{

   VALUES (?op1 ?op2) {
        ("PT2M3S"^^<http://www.w3.org/2001/XMLSchema#duration> 
"PT1M10S"^^<http://www.w3.org/2001/XMLSchema#duration>)
        ("PT2M3.123S"^^<http://www.w3.org/2001/XMLSchema#duration> 
"PT1M1.123S"^^<http://www.w3.org/2001/XMLSchema#duration>)
        ("PT0M3.123S"^^<http://www.w3.org/2001/XMLSchema#duration> 
"PT1M10.123S"^^<http://www.w3.org/2001/XMLSchema#duration>)
        ("PT2M3.123S"^^<http://www.w3.org/2001/XMLSchema#duration> 
"PT1M10.123S"^^<http://www.w3.org/2001/XMLSchema#duration>)
        ("PT1H4M3.123S"^^<http://www.w3.org/2001/XMLSchema#duration> 
"PT0M10.123S"^^<http://www.w3.org/2001/XMLSchema#duration>)
    }

    BIND(?op1 - ?op2 AS ?res)

}



> Subtracting two xsd:Duration gives incorrect results in SPARQL query
> --------------------------------------------------------------------
>
>                 Key: JENA-1402
>                 URL: https://issues.apache.org/jira/browse/JENA-1402
>             Project: Apache Jena
>          Issue Type: Bug
>          Components: ARQ
>    Affects Versions: Jena 3.4.0
>            Reporter: Greg Albiston
>
> There is an issue when subtracting two xsd:durations that include:
> * decimal seconds
> * non-zero minutes
> * second operand has a greater number of seconds than the first operand, i.e. 
> the minutes are reduced. 
> The result is a large number of minutes and incorrect seconds.
> For example:
> Integer, Larger: "PT2M3S" - "PT1M10S"  = "PT0M53S" CORRECT
> Decimal, Smaller: "PT2M3.123S" - "PT1M1.123S" = "PT1M2.000S" CORRECT
> Decimal, Larger, Seconds: "PT0M3.123S" - "PT1M10.123S"  = "-PT1M7.000S" 
> CORRECT
> Decimal, Larger, Minutes: "PT2M3.123S" - "PT1M10.123S"  = "PT883M0.020S" 
> INCORRECT
> Decimal, Larger, Hours: "PT1H4M3.123S" - "PT0M10.123S" = "PT1H3883M0.020S" 
> INCORRECT
> Example SPARQL:
> {code:sparql}
> SELECT ?res ?op1 ?op2
> WHERE{
>    VALUES (?op1 ?op2) {
>         ("PT2M3S"^^<http://www.w3.org/2001/XMLSchema#duration> 
> "PT1M10S"^^<http://www.w3.org/2001/XMLSchema#duration>)
>         ("PT2M3.123S"^^<http://www.w3.org/2001/XMLSchema#duration> 
> "PT1M1.123S"^^<http://www.w3.org/2001/XMLSchema#duration>)
>         ("PT0M3.123S"^^<http://www.w3.org/2001/XMLSchema#duration> 
> "PT1M10.123S"^^<http://www.w3.org/2001/XMLSchema#duration>)
>         ("PT2M3.123S"^^<http://www.w3.org/2001/XMLSchema#duration> 
> "PT1M10.123S"^^<http://www.w3.org/2001/XMLSchema#duration>)
>         ("PT1H4M3.123S"^^<http://www.w3.org/2001/XMLSchema#duration> 
> "PT0M10.123S"^^<http://www.w3.org/2001/XMLSchema#duration>)
>     }
>     BIND(?op1 - ?op2 AS ?res)
> }
> {code}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to