您好我想添加基于空间的三重
http://www.izmirdeafet.com/Disaster htp://www.opengis.net/ont/geosparql#asWKT> "htp://www.opengis.net/def/crs/OGC/1.3/CRS84 POINT (8.46035239692792 51.48661096320327)"^^<http://www.opengis.net/ont/sf#wktLiteral>
在下面的java代码中使用jena
库进入议会三重商店但是ı在下面已经出错了。我有基于空间的本体论,它已经添加到三重商店。
public static void main(String[] args) {
// set to false when running the second time to avoid recreating the graphs/index
boolean firstTime = true;
// create spatial index factory and configure for GeoSPARQL. This is used
// by the GraphStore whenever a new named graph is created.
SpatialIndexFactory factory = new SpatialIndexFactory();
Properties properties = new Properties();
properties.setProperty(Constants.GEOMETRY_INDEX_TYPE,
Constants.GEOMETRY_INDEX_RTREE);
properties.setProperty(Constants.GEOSPARQL_ENABLED,
Boolean.TRUE.toString());
factory.configure(properties);
// register factory
IndexFactoryRegistry.getInstance().register(factory);
// create a Parliament graph and graph store
//KbGraph graph= KbGraphFactory.createNamedGraph();
KbGraph graph =
KbGraphFactory.createDefaultGraph("file:C:\\ParliamentKB\\data\\");
KbGraphStore graphStore = new KbGraphStore(graph);
graphStore.initialize();
if (firstTime) {
// create spatial index from factory
SpatialIndex index = factory.createIndex(graph, null);
// register index with IndexManager
IndexManager.getInstance().register(graph, null, factory, index);
// the following tells the graph store that the graph is now an
// indexing graph. This is necessary so that the next time Parliament
// loads, the index is read in automatically.
graphStore.setIndexingEnabled(KbGraphStore.DEFAULT_GRAPH_NODE, true);
}
// create a Jena model
Model model = ModelFactory.createModelForGraph(graph);
// load data
String fileName =
"C:\\Users\\Can\\Desktop\\DisasterOntologyEnglish\\disaster.rdf";
RDFFormat dataFormat = RDFFormat.parseFilename(fileName);
FileManager.get().readModel(model, fileName, dataFormat.toString());
// get index and print size
System.out.println(IndexManager.getInstance().
getIndexes(graph).get(0).size());
// do a spatial query
String query = ""
+ "\nPREFIX my: <http://somewhere/ApplicationSchema#>"
+ "\nPREFIX geo: <http://www.opengis.net/ont/OGC-GeoSPARQL/1.0/>"
+ "\nPREFIX geof:
<http://www.opengis.net/def/queryLanguage/OGC-GeoSPARQL/1.0/function/>"
+ "\nSELECT ?f" + "\nWHERE { my:A my:hasExactGeometry ?aGeom ."
+ "\n ?aGeom geo:asWKT ?aWKT ."
+ "\n ?f my:hasExactGeometry ?fGeom ."
+ "\n ?fGeom geo:asWKT ?fWKT ."
+ "\n FILTER (geof:sf-contains(?aWKT, ?fWKT) &&"
+ "\n !sameTerm(?aGeom, ?fGeom)) " + "\n}";
Query q = QueryFactory.create(query, Syntax.syntaxARQ);
ResultSet rs = QueryExecutionFactory.create(q, model).execSelect();
while (rs.hasNext()) {
System.out.println(rs.nextSolution());
}
}
错误
Exception in thread "main" java.lang.UnsatisfiedLinkError:
no Parliament in java.library.path
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at com.bbn.parliament.jni.Config.<clinit>(Config.java:184)
at com.bbn.parliament.jena.graph.KbGraphFactory.getKbConfigForDefaultGraph
(KbGraphFactory.java:81)
at com.bbn.parliament.jena.graph.KbGraphFactory.createDefaultGraph
(KbGraphFactory.java:38)
at com.disaster.demo.GeoSPARQLTest.main(GeoSPARQLTest.java:46)
我认为问题来自createdefaultgraph
部分:
你说的是ParliamentConfig.txt
KbGraph graph = KbGraphFactory.createDefaultGraph("file:C:\\ParliamentKB\\data\\");
我这样编码,但它没有用。
答案 0 :(得分:1)
未满足的链接错误可能表示它无法在java路径中找到Parliament.dll。
检查此SO以获取有关java路径中dll的详细信息: java.lang.UnsatisfiedLinkError no *****.dll in java.library.path
另外,您是否关注议会设置指南? http://parliament.semwebcentral.org/ParliamentUserGuide.pdf
你也可能想确保你使用正确的dll ...它已经有一段时间了,所以我可能错了,但我认为有32位和64位版本。
答案 1 :(得分:0)
在议会用户指南(http://parliament.semwebcentral.org/ParliamentUserGuide.pdf)中,第26页的第2.8节专门用于解决这些UnsatisfiedLinkError问题。
答案 2 :(得分:0)
根据抛出的异常,您的问题是由于配置/建立议会环境变量的差距。请遵循上面答案中提供的ParliamentUserGuide。一旦完成,您将得到并输出如下:
INFO [main] (KbGraphStore.java:163) - Adding named graph: <http://parliament.semwebcentral.org/parliament#MasterGraph> (graphDir = "master")
Apr 07, 2014 2:17:05 PM org.geotools.referencing.factory.epsg.ThreadedEpsgFactory <init>
INFO: Setting the EPSG factory org.geotools.referencing.factory.epsg.ThreadedHsqlEpsgFactory to a 1800000ms timeout
Apr 07, 2014 2:17:05 PM org.geotools.referencing.factory.epsg.ThreadedEpsgFactory <init>
INFO: Setting the EPSG factory org.geotools.referencing.factory.epsg.DefaultFactory to a 1800000ms timeout
Apr 07, 2014 2:17:05 PM org.geotools.referencing.factory.epsg.ThreadedHsqlEpsgFactory createDataSource
INFO: Building new data source for org.geotools.referencing.factory.epsg.ThreadedHsqlEpsgFactory
Apr 07, 2014 2:17:05 PM org.geotools.referencing.factory.epsg.ThreadedHsqlEpsgFactory createBackingStore
INFO: Building backing store for org.geotools.referencing.factory.epsg.ThreadedHsqlEpsgFactory
Apr 07, 2014 2:17:05 PM org.geotools.referencing.factory.epsg.ThreadedHsqlEpsgFactory createBackingStore
INFO: Creating cached EPSG database version 7.5.0. This operation may take a few minutes...
Apr 07, 2014 2:17:06 PM org.geotools.referencing.factory.PropertyAuthorityFactory <init>
WARNING: Axis elements found in a wkt definition, the force longitude first axis order hint might not be respected:
PROJCS["Google Projection",GEOGCS["WGS 84",DATUM["World Geodetic System 1984",SPHEROID["WGS 84", 6378137.0, 298.257223563, AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich", 0.0, AUTHORITY["EPSG","8901"]],UNIT["degree", 0.017453292519943295],AXIS["Geodetic longitude", EAST],AXIS["Geodetic latitude", NORTH],AUTHORITY["EPSG","4326"]],PROJECTION["Popular Visualisation Pseudo Mercator", AUTHORITY["EPSG","1024"]],PARAMETER["semi_minor", 6378137.0],PARAMETER["latitude_of_origin", 0.0],PARAMETER["central_meridian", 0.0],PARAMETER["scale_factor", 1.0],PARAMETER["false_easting", 0.0],PARAMETER["false_northing", 0.0],UNIT["m", 1.0]]
只有在此之后,您才能对创建的模型执行任何操作,例如添加三元组和查询。
除了具有空间属性的Triple:假设您想要向个人添加空间坐标(例如individual
),您可以使用以下代码段:
import com.bbn.parliament.jena.graph.index.spatial.geosparql.datatypes.WKTLiteral;
import com.bbn.parliament.jena.graph.index.spatial.geosparql.vocabulary.*;
.
.
.
WKTLiteral geoLiteral = new WKTLiteral();
String value="Point(22.5 88.5)";// OR "POLYGON((22.5 88.5, 88.5 99.5, 99.5 22.5))"
individual.addLiteral(Geo.asWKT, model.createTypedLiteral(value, geoLiteral));
诀窍:
KbGraph graph = KbGraphFactory.createDefaultGraph("file:C:\\ParliamentKB\\data\\");
不行,我不知道为什么!所以你可能需要在ParliamentCOnfig.txt中指定epath。