27.02.2013 21:50, Dave Reynolds пишет:
On 27/02/13 17:38, Егор Егоров wrote:
26.02.2013 01:02, Егор Егоров пишет:
Hello, Jena developers!
I am trying to load the BTC-2009 dataset from SemSearch-2011 into tdb.
(Jena 2.7.4)
In chunk 13 there are some interesting quads:
http://www.swop-project.eu/swop-solutions/ontologies/wagemaker/lambda-mini_ligger.owl
http://www.swop-project.eu/ontologies/wagemaker/lambda-mini_ligger.owl#minimaleBreedte
http://www.swop-project.eu/ontologies/pmo/product.owl#defaultValue
"190"^^http://www.w3.org/2001/XMLSchema#anySimpleType
http://www.swop-project.eu/swop-solutions/ontologies/wagemaker/lambda-mini_ligger.owl
http://www.swop-project.eu/ontologies/wagemaker/lambda-mini_ligger.owl#diffWerkendeEffectieveBreedte
http://www.swop-project.eu/ontologies/pmo/product.owl#defaultValue
"10"^^http://www.w3.org/2001/XMLSchema#anySimpleType
... etc.
They have xsd:anySimpleType.
riot --validate tells me that there are no errors, so this file can be
loaded into tdb, right?
But when I try to load it via tdbloader, I get the following:
http://www.swop-project.eu/swop-solutions/ontologies/wagemaker/lambda-mini_ligger.owl
http://www.swop-project.eu/ontologies/wagemaker/lambda-mini_ligger.owl#diffWerkendeEffectieveBreedte
http://www.swop-project.eu/ontologies/pmo/product.owl#defaultValue
"10"^^http://www.w3.org/2001/XMLSchema#anySimpleType
java.lang.NullPointerException
at
com.hp.hpl.jena.datatypes.xsd.XSDDatatype.getFoundingType(XSDDatatype.java:525)
at
com.hp.hpl.jena.datatypes.xsd.XSDDatatype.isBaseTypeCompatible(XSDDatatype.java:508)
at
com.hp.hpl.jena.datatypes.xsd.impl.XSDBaseNumericType.isValidLiteral(XSDBaseNumericType.java:70)
at com.hp.hpl.jena.tdb.store.NodeId.inline(NodeId.java:208)
at
com.hp.hpl.jena.tdb.nodetable.NodeTableInline.getAllocateNodeId(NodeTableInline.java:49)
at
com.hp.hpl.jena.tdb.nodetable.NodeTupleTableConcrete.addRow(NodeTupleTableConcrete.java:84)
at
com.hp.hpl.jena.tdb.store.bulkloader.LoaderNodeTupleTable.load(LoaderNodeTupleTable.java:110)
at
com.hp.hpl.jena.tdb.store.bulkloader.BulkLoader$2.send(BulkLoader.java:291)
at
com.hp.hpl.jena.tdb.store.bulkloader.BulkLoader$2.send(BulkLoader.java:261)
at org.openjena.riot.lang.LangNTuple.runParser(LangNTuple.java:71)
at org.openjena.riot.lang.LangBase.parse(LangBase.java:43)
at org.openjena.riot.RiotReader.parseQuads(RiotReader.java:134)
at org.openjena.riot.RiotReader.parseQuads(RiotReader.java:121)
at org.openjena.riot.RiotReader.parseQuads(RiotReader.java:107)
at
com.hp.hpl.jena.tdb.store.bulkloader.BulkLoader.loadQuads$(BulkLoader.java:160)
at
com.hp.hpl.jena.tdb.store.bulkloader.BulkLoader.loadDataset(BulkLoader.java:121)
at com.hp.hpl.jena.tdb.TDBLoader.loadDataset$(TDBLoader.java:283)
at com.hp.hpl.jena.tdb.TDBLoader.loadDataset(TDBLoader.java:196)
at com.hp.hpl.jena.tdb.TDBLoader.load(TDBLoader.java:75)
at tdb.tdbloader.loadQuads(tdbloader.java:163)
at tdb.tdbloader.exec(tdbloader.java:122)
at arq.cmdline.CmdMain.mainMethod(CmdMain.java:101)
at arq.cmdline.CmdMain.mainRun(CmdMain.java:63)
at arq.cmdline.CmdMain.mainRun(CmdMain.java:50)
at tdb.tdbloader.main(tdbloader.java:53)
I suppose that in method getFoundingType() there is no base type for
xsd:anySimpleType, so we have null.
/**
* Return the most specific type below xsd:anySimpleType that this
type is derived from.
*/
private XSTypeDefinition getFoundingType() {
XSTypeDefinition founding = typeDeclaration;
XSTypeDefinition parent = founding.getBaseType();
while (parent.getBaseType() != null) {
founding = parent;
parent = founding.getBaseType();
}
return founding;
Is it a bug? I think jena should throw another exception.
Thanks.
Please, answer. Using xsd:anySimpleType is legal, riot --validate shows
no ERROR strings. But tdbload crashes with NullPointerException. Is it
Jena's problem or just invalid data?
My initial reaction is that it is both.
First, I don't think the xsd ur-types (xsd:anyType and
xsd:anySimpleType) are intended to be instantiated. In any case the
RDF specification explicitly lists the XSD types which may be
supported [1] and omits those. So they fall under the SHOULD NOT be
clause of that section. So from the point of view of datatype
semantics that's invalid data even though it might be syntactically
legal data. Riot is (I assume) checking syntax but not preventing you
from using inappropriate datatypes.
Second, it is a Jena bug to throw an NPE. It should either treat
xsd:any[Simple]Type in the same way that it treats user defined types
or it should throw a more meaningful exception. Probably the former.
Dave
[1] http://www.w3.org/TR/rdf-mt/#dtype_interp
Thank you, Dave! Very useful link to the spec.