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.

Reply via email to