
Socket API
这一 API 暂时停止维护。
简单样例
我们目前提供了 JAVA , C++ , PHP 和 Python 的 gStore API 。请参考 api/socket/cpp/example , api/socket/java/example , api/socket/php 和 api/socket/php/example 的样例代码。要使用 Java 和 C++ 的样例,请确保已经生成了可执行程序。如果没有生成,只需要在 gStore 根目录下输入 make APIexample 来编译代码和 API 。
接下来, 用 ./gserver 指令启动 gStore 服务器。 如果你知道一个正在运行的可用的 gStore 服务器,你可以尝试连接它,请注意服务器 ip 、服务器和客户端的端口号必须匹配。 (样例使用默认设置,不需要更改。)之后,对于 Java 和 C++ ,你需要在 gStore/api/ 目录下编译样例代码。或者你可以自己编译代码,在本例中,请分别打开 gStore/api/socket/cpp/example/ 和 gStore/api/socket/java/example/ 。
最后,打开样例目录并运行相应的可执行程序。对 C++ 而言,用 ./example 指令运行。对 Java 而言,用 make run 指令或 java -cp ../lib/GstoreJavaAPI.jar:.JavaAPIExample 运行。 PHP 和 Python 文件不需要编译,可以直接执行。这些程序都会连接到指定的 gStore 服务器并做一些加载或查询操作。请确保你在运行样例的终端看到了查询结果,如果没有,请参阅【 FAQ】 一章或向我们报告。
我们建议你仔细阅读样例代码和相应的 Makefle 。这会帮助你理解 API ,特别是如果你想基于 API 写自己的程序。
C++ API
接口
要使用 C++ API ,请在你的 cpp 代码中加入 #include "GstoreConnector.h" 。 GstoreConnector.h 中的函数可以如下调用:
// 初始化 Gstore 服务器的 IP 地址和端口
GstoreConnector gc("127.0.0.1", 3305);
// 由一个 RDF 文件 build 一个数据库
// 注意,文件地址是相对 gserver 的地址
gc.build("lubm", "../data/lubm/lubm.nt");
// 然后你可以在这一数据库上执行 SPARQL 查询
std::string sparql = "select ?x where \
{\
?x <rdf:type> <ub:UndergraduateStudent>. \
?y <ub:name> <Course1>. \
?x <ub:takesCourse> ?y. \
?z <ub:teacherOf> ?y. \
?z <ub:name> <FullProfessor1>. \
?z <ub:worksFor> ?w. \
?w <ub:name> <Department0>. \
}";
std::string answer = gc.query(sparql);
// unload 这一数据库
gc.unload("lubm");
// 你也可以直接 load 已存在的数据库然后进行查询
gc.load("lubm");
// 在当前数据库查询 SPARQL
answer = gc.query(sparql);
原始的函数声明如下:
GstoreConnector();
GstoreConnector(string _ip, unsigned short _port);
GstoreConnector(unsigned short _port);
bool load(string _db_name);
bool unload(string _db_name);
bool build(string _db_name, string _rdf_file_path);
string query(string _sparql);
注意:
1. 在使用 GstoreConnector() 时, ip 和端口的默认值分别是 127.0.0.1 和 3305。
2. 在使用 build() 时, rdf_fle_path (第二个参数)应该和 gserver 的位置相关。
3. 请记得卸载你导入的数据库,否则可能会出错。(错误可能不被报告!)
编译
我们建议你在 gStore/api/socket/cpp/example/Makefle 中查看如何用 C++ API 编译你的代码。通常来说,你必须要将代码编译为包含了 C++ API 头的目标文件,并将目标文件连接到 C++ API 中的静态库。
我们假设你的源代码在 test.cpp 中,位置为 ${GSTORE}/gStore/ 。(如果名字是 devGstores 而不是 gStore ,那么路径为 ${GSTORE}/devGstore/ )
用 g++ -c -I${GSTORE}/gStore/api/socket/cpp/src/ test.cpp -o test.o 将你的 test.cpp 编译成 test.o ,相关的 API 头在 api/socket/cpp/src/ 中。
用 g++ -o test test.o -L${GSTORE}/gStore/api/socket/cpp/lib/ -lgstoreconnector 将 test.o 连接到 api/socket/cpp/lib/ 中的libgstoreconnector.a (静态库)。
接下来,你可以输入 ./test 执行使用了 C++ API 的程序。我们还建议你将相关的编译命令和其他你需要的命令放在 Makefle 中。
Java API
接口
要使用 Java API ,请在 java 代码中加入 import jgsc.GstoreConnector;。 GstoreConnector.java 中的函数应该如下调用:
// 初始化 Gstore 服务器的 IP 地址和端口
GstoreConnector gc = new GstoreConnector("127.0.0.1", 3305);
// 由一个 RDF 文件 build 一个数据库
// 注意,文件地址是相对 gserver 的地址
gc.build("lubm", "../data/lubm/lubm.nt");
// 然后你可以在这一数据库上执行 SPARQL 查询.
String sparql = "select ?x where " + "{" +
"?x <rdf:type> <ub:UndergraduateStudent>. " +
"?y <ub:name> <Course1>. " +
"?x <ub:takesCourse> ?y. " +
"?z <ub:teacherOf> ?y. " +
33
"?z <ub:name> <FullProfessor1>. " +
"?z <ub:worksFor> ?w. " +
"?w <ub:name> <Department0>. " +
"}";
String answer = gc.query(sparql);
// unload 这一数据库
gc.unload("lubm");
// 你也可以直接 load 已存在的数据库然后进行查询
gc.load("lumb");// 在当前数据库查询SPARQL
answer = gc.query(sparql);
这些函数的原始声明如下:
GstoreConnector();
GstoreConnector(string _ip, unsigned short _port);
GstoreConnector(unsigned short _port);
bool load(string _db_name);
bool unload(string _db_name);
bool build(string _db_name, string _rdf_file_path);
string query(string _sparql);
注意:
1. 在使用 GstoreConnector() 时, ip 和端口的默认值分别是 127.0.0.1 和 3305。
2. 在使用 build() 时, rdf_fle_path (第二个参数)应该和是对于 gserver 的相对路径。
3. 请记得 unload 你导入的数据库,否则可能会出错。(错误可能不被报告!)
编译
我们建议你在 gStore/api/socket/java/example/Makefle 中查看如何用Java API 编译你的代码。通常来说,你必须要将代码编译为包含了 Java API 中 jar 文件的目标文件。
我们假设你的源代码在 test.java 中,位置为 ${GSTORE}/gStore/ 。(如果名字是 devGstores 而不是 gStore ,那么路径为 ${GSTORE}/devGstore/ )
用 javac -cp ${GSTORE}/gStore/api/socket/java/lib/GstoreJavaAPI.jar test.java 将 test.java 编译为使用了 api/socket/java/lib/ 中 GstoreJavaAPI.jar ( Java 中使用的 jar 包)的 test.class
接下来,你可以输入 java -cp ${GSTORE}/gStore/api/socket/java/lib/GstoreJavaAPI.jar:. test 执行使用了 Java API 的程序(注意,命令中的 “:.”不能省略)。我们还建议你将相关的编译命令和其他你需要的命令放在 Makefle 中。
PHP API
要使用 PHP API ,请在你的 PHP 代码中加入 include('GstoreConnector,php');。 GstoreConnector.php 中的函数应该如下调用:
// 初始化 Gstore 服务器的 IP 地址和端口
$gc = new Connector("127.0.0.1", 3305);
// 由一个 RDF 文件新建一个数据库
// 注意,文件地址是相对 gserver 的地址
$gc->build("lubm", "../data/lubm/lubm.nt");
// 然后你可以在这一数据库上执行 SPARQL 查询
$sparql = "select ?x where " + "{" +
"?x <rdf:type> <ub:UndergraduateStudent>. " +
"?y <ub:name> <Course1>. " +
"?x <ub:takesCourse> ?y. " +
"?z <ub:teacherOf> ?y. " +
"?z <ub:name> <FullProfessor1>. " +
"?z <ub:worksFor> ?w. " +
"?w <ub:name> <Department0>. " +
"}";
$answer = gc->query($sparql);
// unload 这一数据库
$gc->unload("lubm");
// 你也可以直接 load 已存在的数据库然后进行查询
$gc->load("lubm");// 在当前数据库查询SPARQL
$answer = gc->query(sparql);
这些函数的原始声明如下:
class Connector {
public function __construct($host, $port);
public function send($data);
public function recv();
public function build($db_name, $rdf_file_path);
public function load($db_name);
public function unload($db_name);
public function query($sparql);
public function __destruct();
}
注意:
1. 在使用 GstoreConnector() 时, ip 和端口的默认值分别是 127.0.0.1 和 3305。
2. 在使用 build() 时, rdf_fle_path (第二个参数)应该和 gserver 的位置相关。
3. 请记得卸载你导入的数据库,否则可能会出错。(错误可能不被报告!)
Python API
要使用 Python API ,请在代码中加入 from GstoreConnector import GstoreConnector 。 GstoreConnector.py 中的函数应该如下调用:
// 初始化 Gstore 服务器的 IP 地址和端口
gc = GstoreConnector('127.0.0.1', 3305)
// 由一个 RDF 文件 build 一个数据库
// 注意,文件地址是相对 gserver 的地址
gc.build('lubm', '../data/lubm/lubm.nt')
// 然后你可以在这一数据库上执行 SPARQL 查询
$sparql = "select ?x where " + "{" +
"?x <rdf:type> <ub:UndergraduateStudent>. " +
"?y <ub:name> <Course1>. " +
"?x <ub:takesCourse> ?y. " +
"?z <ub:teacherOf> ?y. " +
"?z <ub:name> <FullProfessor1>. " +
"?z <ub:worksFor> ?w. " +
36
"?w <ub:name> <Department0>. " +
"}";
answer = gc.query(sparql)
// unload 这一数据库
gc.unload('lubm')
// 你也可以直接 load 已存在的数据库然后进行查询
gc.load('lubm')// 在当前数据库查询sparql
answer = gc.query(sparql)
函数的原始声明如下:
class GstoreConnector {
def _connect(self)
def _disconnect(self)
def _send(self, msg):
def _recv(self)
def _pack(self, msg):
def _communicate(f):
def __init__(self, ip='127.0.0.1', port=3305):
@_communicate
def test(self)
@_communicate
def load(self, db_name)
@_communicate
def unload(self, db_name)
@_communicate
def build(self, db_name, rdf_file_path)
@_communicate
def drop(self, db_name)
@_communicate
def stop(self)
@_communicate
def query(self, sparql)
@_communicate
def show(self, _type=False)
}
注意:
1. 在使用 GstoreConnector() 时, ip 和端口的默认值分别是 127.0.0.1 和 3305。
2. 在使用 build() 时, rdf_fle_path (第二个参数)应该和 gserver 的位置相关。
3. 请记得卸载你导入的数据库,否则可能会出错。(错误可能不被报告!)