openlink / virtuoso-opensource

Virtuoso is a high-performance and scalable Multi-Model RDBMS, Data Integration Middleware, Linked Data Deployment, and HTTP Application Server Platform
https://vos.openlinksw.com
Other
863 stars 210 forks source link

Language is specified for typed literal in DB.DBA.RDF_MAKE_LONG_OF_TYPEDSQLVAL() #286

Open jakubklimek opened 9 years ago

jakubklimek commented 9 years ago

Commit: a170a0f4ba63acbaf403ac83964d58a815fb2241 Database here

The below query when executed through the Sesame2 Virtuoso driver causes

Exception:virtuoso.jdbc4.VirtuosoException: Language is specified for typed literal in DB.DBA.RDF_MAKE_LONG_OF_TYPEDSQLVAL()
at virtuoso.sesame2.driver.VirtuosoRepositoryConnection.executeSPARUL(VirtuosoRepositoryConnection.java:1834)
at virtuoso.sesame2.driver.VirtuosoRepositoryConnection$4.execute(VirtuosoRepositoryConnection.java:518)

It evaluates OK through SPARQL endpoint and isql.

The error is caused by the @cs language tags in the INSERT clause, when you remove them, the query works even through the Sesame driver.

Query:

prefix mfcr-dsd:       <http://linked.opendata.cz/resource/domain/mfcr/monitor/dsd/>
prefix mfcr-data:      <http://linked.opendata.cz/resource/domain/mfcr/monitor/data/>
prefix nuts:           <http://ec.europa.eu/eurostat/ramon/ontologies/geographic.rdf#>
prefix qb:             <http://purl.org/linked-data/cube#>
prefix rdfs:           <http://www.w3.org/2000/01/rdf-schema#>
prefix sdmx-attribute: <http://purl.org/linked-data/sdmx/2009/attribute#>
prefix sdmx-dimension: <http://purl.org/linked-data/sdmx/2009/dimension#>
prefix simple:         <http://linked.opendata.cz/ontology/domain/mfcr/simplerdf/>
prefix xsd:            <http://www.w3.org/2001/XMLSchema#>
prefix dcterms:        <http://purl.org/dc/terms/>

WITH <http://unifiedviews.eu/resource/internal/dataunit/exec/156/dpu/196/du/1/entry/1> 
 INSERT 
{
mfcr-data:FINU108 a qb:DataSet ;
    qb:structure mfcr-dsd:FINU108 ;
    rdfs:label "MFČR FINU108"@cs ;
    dcterms:title "MFČR FINU108"@cs ;
    rdfs:comment "Výkaz pro hodnocení plnění rozpočtu správců kapitol, organizačních složek státu a státních fondů FIN 2-04 U, část 8"@cs ;
    dcterms:description "Výkaz pro hodnocení plnění rozpočtu správců kapitol, organizačních složek státu a státních fondů FIN 2-04 U, část 8"@cs 
    .
?observation a qb:Observation;
    #DataSet
    qb:dataSet mfcr-data:FINU108 ;

    #Dimensions
    mfcr-dsd:vykazTabulka ?vykazTabulka ;
    mfcr-dsd:fiskalniObdobi ?fiskalniObdobi ;
    mfcr-dsd:ic ?ic ;
    mfcr-dsd:polozka ?polozka ;
    mfcr-dsd:rozpoctovyProgram ?rozpoctovyProgram ;

    #Measures
    mfcr-dsd:schvalenyRozpocet ?schvalenyRozpocet ;
    mfcr-dsd:rozpocetPoZmenach ?rozpocetPoZmenach ;
    mfcr-dsd:konecnyRozpocet ?konecnyRozpocet ;
    mfcr-dsd:vysledekZaRok ?vysledekZaRok
    . 
}
USING <http://unifiedviews.eu/resource/internal/dataunit/exec/156/dpu/190/du/1/entry/5> 
WHERE
{
?row simple:vykaz ?simpleVykaz ;
     simple:vykazTabulka ?simpleVykazTabulka ;
     simple:fiskalniObdobi ?simpleFiskalniObdobi ;
     simple:ic ?simpleIc ;
     simple:rozpoctovyProgram ?simpleRozpoctovyProgram ;
     simple:polozka ?simplePolozka ;
     simple:schvalenyRozpocet ?simpleSchvalenyRozpocet ;
     simple:rozpocetPoZmenach ?simpleRozpocetPoZmenach ;
     simple:konecnyRozpocet ?simpleKonecnyRozpocet ;
     simple:vysledekZaRok ?simpleVysledekZaRok
     .

BIND (IRI(CONCAT("http://linked.opendata.cz/resource/domain/mfcr/monitor/data/observations/finu108/",
                 ?simpleVykaz,"/", ?simpleVykazTabulka,"/", ?simpleFiskalniObdobi,"/", ?simpleIc, "/", ?simplePolozka, "/", ?simpleRozpoctovyProgram )) as ?observation)
BIND (IRI(CONCAT("http://linked.opendata.cz/resource/domain/mfcr/monitor/ciselniky/TabulkaVykazu/", REPLACE(?simpleVykaz,"0+([^0].*)","$1"), "/", REPLACE(?simpleVykazTabulka,"0+([^0].*)","$1"))) as ?vykazTabulka)
BIND (IRI(CONCAT("http://linked.opendata.cz/resource/domain/mfcr/monitor/ciselniky/FiskalniObdobi/", ?simpleFiskalniObdobi)) as ?fiskalniObdobi)
BIND (IRI(CONCAT("http://linked.opendata.cz/resource/domain/mfcr/monitor/ciselniky/UcetniJednotka/", IF(strlen(?simpleIc) = 10, substr(?simpleIc, 3), ?simpleIc))) as ?ic)
BIND (IRI(CONCAT("http://linked.opendata.cz/resource/domain/mfcr/monitor/ciselniky/Polozka/", ?simplePolozka)) as ?polozka)
BIND (IRI(CONCAT("http://linked.opendata.cz/resource/domain/mfcr/monitor/ciselniky/RozpoctovyProgram/", ?simpleRozpoctovyProgram)) as ?rozpoctovyProgram)
BIND (xsd:decimal(IF(CONTAINS(?simpleSchvalenyRozpocet, '-'), CONCAT("-", strbefore(?simpleSchvalenyRozpocet, "-")), strbefore(?simpleSchvalenyRozpocet, " "))) as ?schvalenyRozpocet)
BIND (xsd:decimal(IF(CONTAINS(?simpleRozpocetPoZmenach, '-'), CONCAT("-", strbefore(?simpleRozpocetPoZmenach, "-")), strbefore(?simpleRozpocetPoZmenach, " "))) as ?rozpocetPoZmenach)
BIND (xsd:decimal(IF(CONTAINS(?simpleKonecnyRozpocet, '-'), CONCAT("-", strbefore(?simpleKonecnyRozpocet, "-")), strbefore(?simpleKonecnyRozpocet, " "))) as ?konecnyRozpocet)
BIND (xsd:decimal(IF(CONTAINS(?simpleVysledekZaRok, '-'), CONCAT("-", strbefore(?simpleVysledekZaRok, "-")), strbefore(?simpleVysledekZaRok, " "))) as ?vysledekZaRok)

}
HughWilliams commented 9 years ago

@jakubklimek: I downloaded the database but when I start it I don't see any new graphs, it almost seems to be an empty database:

SQL> SPARQL SELECT distinct ?graph WHERE { GRAPH ?graph { ?s ?p ?o } }; graph VARCHAR


http://www.openlinksw.com/schemas/virtrdf# http://www.w3.org/ns/ldp# http://localhost:8890/sparql http://localhost:8890/DAV/ http://www.w3.org/2002/07/owl#

5 Rows. -- 334 msec. SQL>

What graphs are suppose to be in the database as I would expect one is reference in the query ?

jakubklimek commented 9 years ago

OK, must have shut down virtuoso before it wrote the data to the .db. Please try downloading again, the query will now be (different graphs):

prefix mfcr-dsd:       <http://linked.opendata.cz/resource/domain/mfcr/monitor/dsd/>
prefix mfcr-data:      <http://linked.opendata.cz/resource/domain/mfcr/monitor/data/>
prefix nuts:           <http://ec.europa.eu/eurostat/ramon/ontologies/geographic.rdf#>
prefix qb:             <http://purl.org/linked-data/cube#>
prefix rdfs:           <http://www.w3.org/2000/01/rdf-schema#>
prefix sdmx-attribute: <http://purl.org/linked-data/sdmx/2009/attribute#>
prefix sdmx-dimension: <http://purl.org/linked-data/sdmx/2009/dimension#>
prefix simple:         <http://linked.opendata.cz/ontology/domain/mfcr/simplerdf/>
prefix xsd:            <http://www.w3.org/2001/XMLSchema#>
prefix dcterms:        <http://purl.org/dc/terms/>
WITH <http://unifiedviews.eu/resource/internal/dataunit/exec/158/dpu/196/du/1/entry/1> 
 INSERT 
{
mfcr-data:FINU108 a qb:DataSet ;
    qb:structure mfcr-dsd:FINU108 ;
    rdfs:label "MFČR FINU108"@cs ;
    dcterms:title "MFČR FINU108"@cs ;
    rdfs:comment "Výkaz pro hodnocení plnění rozpočtu správců kapitol, organizačních složek státu a státních fondů FIN 2-04 U, část 8"@cs ;
    dcterms:description "Výkaz pro hodnocení plnění rozpočtu správců kapitol, organizačních složek státu a státních fondů FIN 2-04 U, část 8"@cs 
    .
?observation a qb:Observation;
    #DataSet
    qb:dataSet mfcr-data:FINU108 ;

    #Dimensions
    mfcr-dsd:vykazTabulka ?vykazTabulka ;
    mfcr-dsd:fiskalniObdobi ?fiskalniObdobi ;
    mfcr-dsd:ic ?ic ;
    mfcr-dsd:polozka ?polozka ;
    mfcr-dsd:rozpoctovyProgram ?rozpoctovyProgram ;

    #Measures
    mfcr-dsd:schvalenyRozpocet ?schvalenyRozpocet ;
    mfcr-dsd:rozpocetPoZmenach ?rozpocetPoZmenach ;
    mfcr-dsd:konecnyRozpocet ?konecnyRozpocet ;
    mfcr-dsd:vysledekZaRok ?vysledekZaRok
    . 
}
USING <http://unifiedviews.eu/resource/internal/dataunit/exec/158/dpu/190/du/1/entry/5> 
WHERE
{
?row simple:vykaz ?simpleVykaz ;
     simple:vykazTabulka ?simpleVykazTabulka ;
     simple:fiskalniObdobi ?simpleFiskalniObdobi ;
     simple:ic ?simpleIc ;
     simple:rozpoctovyProgram ?simpleRozpoctovyProgram ;
     simple:polozka ?simplePolozka ;
     simple:schvalenyRozpocet ?simpleSchvalenyRozpocet ;
     simple:rozpocetPoZmenach ?simpleRozpocetPoZmenach ;
     simple:konecnyRozpocet ?simpleKonecnyRozpocet ;
     simple:vysledekZaRok ?simpleVysledekZaRok
     .
BIND (IRI(CONCAT("http://linked.opendata.cz/resource/domain/mfcr/monitor/data/observations/finu108/",
                 ?simpleVykaz,"/", ?simpleVykazTabulka,"/", ?simpleFiskalniObdobi,"/", ?simpleIc, "/", ?simplePolozka, "/", ?simpleRozpoctovyProgram )) as ?observation)
BIND (IRI(CONCAT("http://linked.opendata.cz/resource/domain/mfcr/monitor/ciselniky/TabulkaVykazu/", REPLACE(?simpleVykaz,"0+([^0].*)","$1"), "/", REPLACE(?simpleVykazTabulka,"0+([^0].*)","$1"))) as ?vykazTabulka)
BIND (IRI(CONCAT("http://linked.opendata.cz/resource/domain/mfcr/monitor/ciselniky/FiskalniObdobi/", ?simpleFiskalniObdobi)) as ?fiskalniObdobi)
BIND (IRI(CONCAT("http://linked.opendata.cz/resource/domain/mfcr/monitor/ciselniky/UcetniJednotka/", IF(strlen(?simpleIc) = 10, substr(?simpleIc, 3), ?simpleIc))) as ?ic)
BIND (IRI(CONCAT("http://linked.opendata.cz/resource/domain/mfcr/monitor/ciselniky/Polozka/", ?simplePolozka)) as ?polozka)
BIND (IRI(CONCAT("http://linked.opendata.cz/resource/domain/mfcr/monitor/ciselniky/RozpoctovyProgram/", ?simpleRozpoctovyProgram)) as ?rozpoctovyProgram)
BIND (xsd:decimal(IF(CONTAINS(?simpleSchvalenyRozpocet, '-'), CONCAT("-", strbefore(?simpleSchvalenyRozpocet, "-")), strbefore(?simpleSchvalenyRozpocet, " "))) as ?schvalenyRozpocet)
BIND (xsd:decimal(IF(CONTAINS(?simpleRozpocetPoZmenach, '-'), CONCAT("-", strbefore(?simpleRozpocetPoZmenach, "-")), strbefore(?simpleRozpocetPoZmenach, " "))) as ?rozpocetPoZmenach)
BIND (xsd:decimal(IF(CONTAINS(?simpleKonecnyRozpocet, '-'), CONCAT("-", strbefore(?simpleKonecnyRozpocet, "-")), strbefore(?simpleKonecnyRozpocet, " "))) as ?konecnyRozpocet)
BIND (xsd:decimal(IF(CONTAINS(?simpleVysledekZaRok, '-'), CONCAT("-", strbefore(?simpleVysledekZaRok, "-")), strbefore(?simpleVysledekZaRok, " "))) as ?vysledekZaRok)
}
HughWilliams commented 9 years ago

@jakubklimek: I download the "dbfit2.zip" DB archive which now gives the following graphs:

SQL> SPARQL SELECT distinct ?graph WHERE { GRAPH ?graph { ?s ?p ?o } }; graph VARCHAR


http://www.openlinksw.com/schemas/virtrdf# http://www.w3.org/2002/07/owl# http://unifiedviews.eu/resource/internal/dataunit/exec/158/dpu/190/du/1/entry/3 http://unifiedviews.eu/resource/internal/dataunit/exec/158/dpu/190/du/1/entry/4 http://unifiedviews.eu/resource/internal/dataunit/exec/158/dpu/177/du/1

5 Rows. -- 109 msec. SQL>

And running the new query provided above against the /sparql-auth endpoint or isql is successful:

SQL> SPARQL prefix mfcr-dsd: http://linked.opendata.cz/resource/domain/mfcr/monitor/dsd/ prefix mfcr-data: http://linked.opendata.cz/resource/domain/mfcr/monitor/data/ prefix nuts: http://ec.europa.eu/eurostat/ramon/ontologies/geographic.rdf# prefix qb: http://purl.org/linked-data/cube# prefix rdfs: http://www.w3.org/2000/01/rdf-schema# prefix sdmx-attribute: http://purl.org/linked-data/sdmx/2009/attribute# prefix sdmx-dimension: http://purl.org/linked-data/sdmx/2009/dimension# prefix simple: http://linked.opendata.cz/ontology/domain/mfcr/simplerdf/ prefix xsd: http://www.w3.org/2001/XMLSchema# prefix dcterms: http://purl.org/dc/terms/ WITH http://unifiedviews.eu/resource/internal/dataunit/exec/158/dpu/196/du/1/entry/1 INSERT { mfcr-data:FINU108 a qb:DataSet ; qb:structure mfcr-dsd:FINU108 ; rdfs:label "MFČR FINU108"@cs ; dcterms:title "MFČR FINU108"@cs ; rdfs:comment "Výkaz pro hodnocení plnění rozpočtu správců kapitol, organizačních složek státu a státních fondů FIN 2-04 U, část 8"@cs ; dcterms:description "Výkaz pro hodnocení plnění rozpočtu správců kapitol, organizačních složek státu a státních fondů FIN 2-04 U, část 8"@cs . ?observation a qb:Observation; qb:dataSet mfcr-data:FINU108 ; mfcr-dsd:vykazTabulka ?vykazTabulka ; mfcr-dsd:fiskalniObdobi ?fiskalniObdobi ; mfcr-dsd:ic ?ic ; mfcr-dsd:polozka ?polozka ; mfcr-dsd:rozpoctovyProgram ?rozpoctovyProgram ; mfcr-dsd:schvalenyRozpocet ?schvalenyRozpocet ; mfcr-dsd:rozpocetPoZmenach ?rozpocetPoZmenach ; mfcr-dsd:konecnyRozpocet ?konecnyRozpocet ; mfcr-dsd:vysledekZaRok ?vysledekZaRok . } USING http://unifiedviews.eu/resource/internal/dataunit/exec/158/dpu/190/du/1/entry/5 WHERE { ?row simple:vykaz ?simpleVykaz ; simple:vykazTabulka ?simpleVykazTabulka ; simple:fiskalniObdobi ?simpleFiskalniObdobi ; simple:ic ?simpleIc ; simple:rozpoctovyProgram ?simpleRozpoctovyProgram ; simple:polozka ?simplePolozka ; simple:schvalenyRozpocet ?simpleSchvalenyRozpocet ; simple:rozpocetPoZmenach ?simpleRozpocetPoZmenach ; simple:konecnyRozpocet ?simpleKonecnyRozpocet ; simple:vysledekZaRok ?simpleVysledekZaRok . BIND (IRI(CONCAT("http://linked.opendata.cz/resource/domain/mfcr/monitor/data/observations/finu108/", ?simpleVykaz,"/", ?simpleVykazTabulka,"/", ?simpleFiskalniObdobi,"/", ?simpleIc, "/", ?simplePolozka, "/", ?simpleRozpoctovyProgram )) as ?observation) BIND (IRI(CONCAT("http://linked.opendata.cz/resource/domain/mfcr/monitor/ciselniky/TabulkaVykazu/", REPLACE(?simpleVykaz,"0+([^0].)","$1"), "/", REPLACE(?simpleVykazTabulka,"0+([^0].)","$1"))) as ?vykazTabulka) BIND (IRI(CONCAT("http://linked.opendata.cz/resource/domain/mfcr/monitor/ciselniky/FiskalniObdobi/", ?simpleFiskalniObdobi)) as ?fiskalniObdobi) BIND (IRI(CONCAT("http://linked.opendata.cz/resource/domain/mfcr/monitor/ciselniky/UcetniJednotka/", IF(strlen(?simpleIc) = 10, substr(?simpleIc, 3), ?simpleIc))) as ?ic) BIND (IRI(CONCAT("http://linked.opendata.cz/resource/domain/mfcr/monitor/ciselniky/Polozka/", ?simplePolozka)) as ?polozka) BIND (IRI(CONCAT("http://linked.opendata.cz/resource/domain/mfcr/monitor/ciselniky/RozpoctovyProgram/", ?simpleRozpoctovyProgram)) as ?rozpoctovyProgram) BIND (xsd:decimal(IF(CONTAINS(?simpleSchvalenyRozpocet, '-'), CONCAT("-", strbefore(?simpleSchvalenyRozpocet, "-")), strbefore(?simpleSchvalenyRozpocet, " "))) as ?schvalenyRozpocet) BIND (xsd:decimal(IF(CONTAINS(?simpleRozpocetPoZmenach, '-'), CONCAT("-", strbefore(?simpleRozpocetPoZmenach, "-")), strbefore(?simpleRozpocetPoZmenach, " "))) as ?rozpocetPoZmenach) BIND (xsd:decimal(IF(CONTAINS(?simpleKonecnyRozpocet, '-'), CONCAT("-", strbefore(?simpleKonecnyRozpocet, "-")), strbefore(?simpleKonecnyRozpocet, " "))) as ?konecnyRozpocet) BIND (xsd:decimal(IF(CONTAINS(?simpleVysledekZaRok, '-'), CONCAT("-", strbefore(?simpleVysledekZaRok, "-")), strbefore(?simpleVysledekZaRok, " "))) as ?vysledekZaRok) }; isql: get_next_token: Unknown macro word "1" at line 152 of Top-Level isql: get_next_token: Unknown macro word "1" at line 152 of Top-Level

Done. -- 979 msec. SQL>

SQL> status(''); REPORT VARCHAR


OpenLink Virtuoso Server Version 07.10.3211-pthreads for Linux as of Jan 8 2015 Started on: 2015-01-14 03:18 GMT+1

Note this is using the INI file etc provided in the zip ...

jakubklimek commented 9 years ago

OK 1) the query gives you wrong results, please see https://github.com/openlink/virtuoso-opensource/issues/290 and use the query shown there 2) As I said in the issue, the query works through isql and through SPARQL endpoint. However, it does not work when issued through Sesame2 virtuoso driver

HughWilliams commented 9 years ago

@jakubklimek: Ah yes, need to run via Sesame .. can you provide some pseudo code as to how the query is being executed via Sesame i.e. what methods are being used ?

jakubklimek commented 9 years ago

The exception is thrown here: https://github.com/mff-uk/DPUs/blob/master/dpu/t-sparqConstruct/src/main/java/cz/cuni/mff/xrg/uv/transformer/sparql/construct/SparqlConstruct.java#L161

It is a UnifiedViews DPU that runs SPARQL queries

HughWilliams commented 9 years ago

@jakubklimek: I have created a sesame program for executing the query and have recreated the error which has been reported to development to fix ...

HughWilliams commented 9 years ago

@jakubklimek: Is there a reason SQL_UTF8_EXECS is set in your INI file as removing this setting enable the query to run via the Sesame Provider. Development indicate that setting this breaks the utf-8 query literals ...

jakubklimek commented 9 years ago

I enabled it to be sure that I did everything I could for UTF-8 support. From the documentation, it is not entirely clear what this does exactly. Does this enable UTF-8 characters in realtional table names? If this is the case then I guess I don't need it as I am using Virtuoso just for RDF