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