> Hi Jena Community,
> I'm new to Jena and I would need your help fixing some issues with my
> code.
> I'm trying to parse a String in duration format ie  "*PnYn MnDTnH nMn**S*" 
> into
> an *XSDDuration* datatype that I'll bind to a Node of my inferred
> graph (in a custom built-in function). To that aim, my parser extracts and
> stores integer values for Year, Month, etc... in an array int[9] of *value,
> *that is latter passed to the XML duration constructor. This works fine
> ...except for when the duration is 0 (see the error below).
>
> public static int[]  parseStringToISODurationInt(String duration) 
> throwsIllegalArgumentException {
>
>      int[] value = new int[9];
>
>      StringTokenizer st = new StringTokenizer(duration);
>
>      String nullDur = "PT0H0M0S";     // from a previous converter
> function
>
>      if (duration == nullDur){
>
>      value[0] = 0;
>
>      value[1] = 0;
>
>      value[2] = 0;
>
>      value[3] = 0;
>
>      value[4] = 0;
>
>      value[5] = 0;
>
>      value[6] = 0;     // [7] is the Z character(zulu timezone, not
> needed here),
>
>      value[8] = 3;     // 'mscale' value
>
>    } else {
>
>      // ....rest of the code
>
>      }
>
>  return value;
>
> }
>
> In my built-in I pass the array obtained to the *XSDDuration(Object
>  value)* constructor and make the new node that is binded to the graph as
> follows :
>
> Node duration = null;
>
>  duration = Node.createLiteral( 
> LiteralLabelFactory.create(newXSDDuration(value)) );
> The following excerpt shows the error when running my built-in for a zero
> duration (value[i]=0 forall i =0,..6 and value[8]=3 ).
>
> Exception in thread "main"
> com.hp.hpl.jena.datatypes.DatatypeFormatException: Lexical form 'P' is not
> a legal instance of Datatype[http://www.w3.org/2001/XMLSchema#duration ->
> class com.hp.hpl.jena.datatypes.xsd.XSDDuration] null
>      [java] at
> com.hp.hpl.jena.graph.impl.LiteralLabelImpl.getValue(LiteralLabelImpl.java:300)
>
> So what what is the legal lexical form for a "zero" duration? How do I
> construct that using the *XSDDuration* constructor?
> Any other solution will be welcomed...
>
> Many thanks in advance for your prompt reaction.
>
> Leo
>

Reply via email to