In our graph we have :flow properties and need to distinguish different kinds of flows, :flowA and :flowB.
We modelled this with in RDFS: :flowA rdfs:subPropertyOf :flow :flowB rdfs:subPropertyOf :flow Some of our SPARQL queries use :flow+ and some use :flowA+, always from an origin: ?origin :flowA+ :?result or ?origin :flow+ :?result If we start Fuseki *without* RDFS, the following queries finish in a second or two: ?origin :flowA+ :?result ?origin :(flowA | :flowB)+ :?result If we start Fuseki *with* RDFS, the following queries take about 85 seconds: ?origin :flowA+ :?result ?origin :flow+ :?result What is causing this difference in performance? Are we missing something or should we avoid RDFS for optimal performance? Any other alternatives? Our overall process is: 1. Generate TTL files with :flowA and :flowB properties (not :flow other than implied by rdfs:subPropertyOf) 2. Load with TDB2 loader 3. Start Fuseki (with RDSF vocabulary or not) Here follows the code we use to start Fuseki. Without RDFS: *Dataset data = TDB2Factory.connectDataset(options.directory);* FusekiServer server = FusekiServer.create() .port(options.port) .loopback(true) *.addDataset(options.datasetName, data.asDatasetGraph())* .addEndpoint(options.datasetName, "query", Operation.Query) // shortestPath .registerOperation(shortestPathOp, WebContent.contentTypeJSON, new ShortestPathService()) .addEndpoint(options.datasetName, "shortestPath", shortestPathOp) // diagnostics .verbose(true) .enablePing(true) .enableStats(true) .enableMetrics(true) .enableTasks(true) .build(); // Start server.start(); With RDFS: *Dataset data = TDB2Factory.connectDataset(options.directory); Graph vocabulary = RDFDataMgr.loadGraph(options.vocabularyFileName); DatasetGraph dsg = RDFSFactory.datasetRDFS(data.asDatasetGraph(), vocabulary);* FusekiServer server = FusekiServer.create() .port(options.port) .loopback(true) *.addDataset(options.datasetName,dsg)* .addEndpoint(options.datasetName, "query", Operation.Query) // shortestPath .registerOperation(shortestPathOp, WebContent.contentTypeJSON, new ShortestPathService()) .addEndpoint(options.datasetName, "shortestPath", shortestPathOp) // diagnostics .verbose(true) .enablePing(true) .enableStats(true) .enableMetrics(true) .enableTasks(true) .build(); // Start server.start();