В этом разделе рассказывается, как использовать наш API для доступа к gStore. Мы предоставляем HTTP API (рекомендуемый) и Socket API, соответствующие ghttp и gserver соответственно.
По сравнению с Socket API HTTP API более стабилен и стандартизирован, а также может поддерживать соединение. Socket API не гарантирует корректную передачу данных, поэтому передача по сети происходит быстрее.
Сейчас мы предоставляем API для C++, Java, Python, PHP и NodeJS для ghttp. Пожалуйста, обратитесь к примерам кода в api/http/cpp
, api/http/java
, api/http/python
, api/http/php
и api/http/nodejs
. Чтобы использовать эти примеры, убедитесь, что исполняемые файлы уже созданы.
Затем запустите службу ghttp с помощью команды \texttt{bin/ghttp}. Если вы знаете работающий и пригодный для использования сервер ghttp и пытаетесь подключиться к нему, всё в порядке (вам не нужно ничего менять при использовании примеров, просто по умолчанию). Затем для кода на C++ и Java вам необходимо скомпилировать примеры в каталоге api/http/cpp/example
и api/http/java/example
.
Наконец, перейдите в каталог примеров и запустите соответствующие исполняемые файлы. Все эти четыре исполняемых файла подключатся к указанному серверу ghttp и выполнят некоторые операции загрузки или запроса. Убедитесь, что вы видите результаты запросов в терминале, где вы запускаете примеры, в противном случае обратитесь за помощью к разделу Часто задаваемые вопросы или сообщите нам об этом (подход к отчёту описан в README).
Рекомендуется внимательно прочитать код примера, а также соответствующий файл Makefile. Это поможет вам понять API, особенно если вы хотите написать свои собственные программы на основе интерфейса API.
HTTP API gStore находится в каталоге api/http в корневом каталоге gStore, содержимое которого приведено ниже:
gStore/api/http/
cpp/ (API для C++)
client.cpp (исходный код API для C++)
client.h
example/ (небольшая примерная программа, демонстрирующая основную идею использования API для C++)
GET-example.cpp
Benchmark.cpp
POST-example.cpp
Makefile
Makefile (компиляция и сборка lib)
java/ (Java API)
client.java
lib/
src/
Makefile
jgsc/
example/
Benckmark.java
GETexample.java
POSTexample.java
Makefile
python/ (Python API)
example/
Benchmark.py
GET-example.py
POST-example.py
src/
nodejs/ (Nodejs API)
GstoreConnector.js (исходный код Nodejs API)
LICENSE
package.json
README.md
example/ (небольшой пример, показывающий основную идею использования Nodejs API)
POST-example.js
GET-example.js
php/ (Php API)
example/
Benchmark.php
POST-example.php
GET-example.php
src/
Чтобы использовать API для C++, пожалуйста, поместите фразу #include "client.h"
в свой код на C++. Функции в client.h следует вызывать следующим образом:
// initialize
GstoreConnector gc("127.0.0.1", 9000, "root", "123456");
// build a new database by a RDF file.
// note that the relative path is related to the server
gc.build("lubm", "data/lubm/lubm.nt");
// load the database that you built.
gc.load("lubm");
// to add, delete a user or modify the privilege of a user, operation must be done by the root user
gc.user("add_user", "user1", "111111");
// show all users
gc.showUser();
// query
std::string res = gc.query("lubm", "json", sparql);
std::cout << res << std::endl;
// query and save the result in a file called "ans.txt"
gc.fquery("lubm", "json", sparql, "ans.txt");
// save the database if you have changed the database
gc.checkpoint("lubm");
// show information of
*Примечание: В тексте запроса присутствуют фрагменты кода, которые не удалось распознать. Возможно, это связано с тем, что они написаны на языке программирования, который не поддерживается.* **Перевод текста на русский язык:**
public String getCoreVersion(String request_type);
public String getAPIVersion(String request_type);
- - -
## Python API
#### Интерфейс
Чтобы использовать Python API, см. gStore/api/http/python/src/GstoreConnector.py. Функции следует вызывать следующим образом:
gc = GstoreConnector.GstoreConnector("127.0.0.1", 9000, "root", "123456")
res = gc.build("lubm", "data/lubm/lubm.nt")
res = gc.load("lubm")
res = gc.user("add_user", "user1", "111111")
res = gc.showUser()
res = gc.query("lubm", "json", sparql) print(res)
gc.fquery("lubm", "json", sparql, "ans.txt")
res = gc.checkpoint("lubm")
res = gc.monitor("lubm")
res = gc.show()
res = gc.unload("lubm")
res = gc.drop("lubm", False)
res = gc.drop("lubm", True)
res = gc.getCoreVersion(); res = gc.getAPIVersion();
Исходное объявление этих функций выглядит следующим образом:
Если request_type — «GET», последний параметр можно опустить:
class GstoreConnector(self, serverIP, serverPort, username, password):
def build(self, db_name, rdf_file_path, request_type):
def load(self, db_name, request_type):
def unload(self, db_name, request_type):
def user(self, type, username2, addition, request_type):
def showUser(self, request_type):
def query(self, db_name, format, sparql, request_type):
def fquery(self, db_name, format, sparql, filename, request_type):
def drop(self, db_name, is_backup, request_type):
def monitor(self, db_name, request_type):
def checkpoint(self, db_name, request_type):
def show(self, request_type):
def getCoreVersion(self, request_type):
def getAPIVersion(self, request_type):
- - -
## Nodejs API
#### Интерфейс
Прежде чем использовать Nodejs API, введите `npm install request` и `npm install request-promise` в папке nodejs, чтобы добавить необходимый модуль.
Чтобы использовать Nodejs API, см. gStore/api/http/nodejs/GstoreConnector.js. Функции следует вызывать следующим образом:
// запустить gc с заданными IP, портом, именем пользователя и паролем gc = new GstoreConnector("127.0.0.1", 9000, "root", "123456");
// создать базу данных с RDF-графом res = gc.build("lubm", "data/lubm/lubm.nt");
// загрузить базу данных res = gc.load("lubm");
// чтобы добавить, удалить пользователя или изменить привилегии пользователя, операция должна выполняться пользователем root res = gc.user("add_user", "user1", "111111");
// показать всех пользователей res = gc.showUser();
// запрос res = gc.query("lubm", "json", sparql); console.log(JSON.stringify(res,","));
// сохранить базу данных, если вы её изменили res = gc.checkpoint("lubm");
// показать информацию о базе данных res = gc.monitor("lubm");
// показать все базы данных res = gc.show();
// выгрузить базу данных res = gc.unload("lubm");
// удалить базу данных напрямую res = gc.drop("lubm", false);
// удалить базу данных и оставить резервную копию res = gc.drop("lubm", true);
// получить CoreVersion и APIVersion res = gc.getCoreVersion(); res = gc.getAPIVersion();
Исходное объявление этих функций выглядит следующим образом:
Если request_type — «GET», последний параметр можно опустить:
class GstoreConnector(ip = '', port, username = '', password = '');
async build(db_name = '', rdf_file_path = '', request_type);
async load(db_name = '', request_type);
async unload(db_name = '', request_type);
async user(type = '', username2 = '' , addition = '' , request_type);
async showUser(request_type);
async query(db_name = '', format = '' , sparql = '' , request_type);
async drop(db_name = '', is_backup , request_type);
async monitor(db_name = '', request_type);
async checkpoint(db_name = '', request_type);
async
В целом, вам необходимо скомпилировать свой код в объектный файл с заголовком в C++ API и связать объект с статической библиотекой в C++ API.
Предположим, что ваш исходный код находится в файле test.cpp, который расположен в каталоге ${TEST}, а проект gStore — в каталоге ${GSTORE}/gStore (если вы используете devGstore вместо gStore, то путь будет ${GSTORE}/devGstore). Сначала перейдите в каталог ${TEST}:
1. Используйте команду `g++ -c -I${GSTORE}/gStore/api/socket/cpp/src/ test.cpp -o test.o`, чтобы скомпилировать test.cpp в test.o. Относительный заголовок API находится в api/socket/cpp/src/.
2. Используйте команду `g++ -o test test.o -L${GSTORE}/gStore/api/socket/cpp/lib/ -lgstoreconnector`, чтобы связать test.o со статической библиотекой libgstoreconnector.a в api/socket/cpplib/.
Затем вы можете выполнить свою программу, используя команду `./test`. Также рекомендуется поместить соответствующие команды компиляции в Makefile, а также другие команды, если хотите.
**Java API**
#### Интерфейс
Чтобы использовать Java API, добавьте фразу `import jgsc.GstoreConnector;` в свой код на Java. Функции в GstoreConnector.java должны вызываться следующим образом:
// инициализируем IP-адрес и порт сервера Gstore. GstoreConnector gc = new GstoreConnector("127.0.0.1", 3305);
// создаём новую базу данных из RDF-файла. // обратите внимание, что относительный путь связан с gserver. gc.build("LUBM10.db", "example/LUBM_10.n3");
// затем вы можете выполнить SPARQL-запрос к этой базе данных. String sparql = "select ?x where " + "{" + "?x rdf:type ub:UndergraduateStudent. " + "?y ub:name . " + "?x ub:takesCourse ?y. " + "?z ub:teacherOf ?y. " + "?z ub:name . " + "?z ub:worksFor ?w. " + "?w ub:name . " + "}"; String answer = gc.query(sparql);
// выгружаем эту базу данных. gc.unload("LUBM10.db");
// также можно напрямую загрузить существующую базу данных и затем запросить. gc.load("LUBM10.db");
// запрос 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);
Обратите внимание:
* При использовании GstoreConnector() значения по умолчанию для ip и port равны 127.0.0.1 и 3305 соответственно.
* При использовании build() параметр rdf_file_path (второй параметр) должен быть связан с местоположением, где находится gserver.
* Не забудьте выгрузить загруженную базу данных, иначе могут возникнуть проблемы (ошибки могут не сообщаться!).
#### Компиляция
Рекомендуется обратиться к файлу gStore/api/socket/java/example/Makefile для получения инструкций по компиляции вашего кода с помощью Java API. В целом, вы должны скомпилировать свой собственный код в объект с jar-файлом в Java API.
Предположим, что исходный код находится в файле test.java, который расположен в каталоге ${TEST}, а проект gStore — в каталоге ${GSTORE}/gStore (если используется devGstore, то путь — ${GSTORE}/devGstore). Сначала перейдите в каталог ${TEST}:
* Используйте команду `javac -cp ${GSTORE}/gStore/api/socket/java/lib/GstoreJavaAPI.jar test.java`, чтобы скомпилировать test.java в test.class с помощью GstoreJavaAPI.jar (jar-пакета, используемого в Java) в api/java/lib/.
Затем можно выполнить вашу программу с помощью команды `java -cp ${GSTORE}/gStore/api/socket/java/lib/GstoreJavaAPI.jar:. test`. Обратите внимание, что часть «:.» в команде нельзя опускать. Рекомендуется поместить соответствующие команды компиляции в файл Makefile, а также другие команды по желанию. ```
// инициализируем IP-адрес и порт сервера Gstore.
$gc = new Connector("127.0.0.1", 3305);
// создаём новую базу данных из файла RDF.
// обратите внимание, что относительный путь связан с gserver.
$gc->build("LUBM10", "example/LUBM_10.n3");
// затем вы можете выполнить запрос 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);
// выгружаем эту базу данных.
$gc->unload("LUBM10");
// также можно загрузить существующую базу данных напрямую и затем запросить.
$gc->load("LUBM10"); // запрос SPARQL в текущей базе данных
$answer = gc->query(sparql);
Объявление функций класса Connector:
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();
}
Примечание:
При использовании Connector() значения по умолчанию для ip и port — 127.0.0.1 и 3305 соответственно.
При использовании build() путь rdf_file_path (второй параметр) должен быть связан с расположением gserver.
Не забудьте выгрузить загруженную базу данных, иначе могут возникнуть проблемы. (ошибки могут не сообщаться!)
Инструкции по использованию PHP API см. в gStore/api/socket/php/PHPAPIExample. Скрипт PHP не требует компиляции. Вы можете запустить файл PHP напрямую или использовать его в своём веб-проекте.
Чтобы использовать Python API, поместите фразу from GstoreConnector import GstoreConnector
в свой код на Python. Функции в GstoreConnector.py следует вызывать следующим образом:
// инициализируем IP-адрес и порт сервера Gstore.
gc = GstoreConnector('127.0.0.1', 3305)
// создаём новую базу данных из файла RDF.
// обратите внимание, что относительный путь связан с gserver.
gc.build('LUBM10', 'data/LUBM_10.n3')
// затем вы можете выполнить запрос 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)
// выгружаем эту базу данных.
gc.unload('LUBM10')
// также можно загрузить существующую базу данных напрямую и затем запросить.
gc.load('LUBM10'); // запрос SPARQL в текущей базе данных
answer = gc.query(sparql)
Объявление функций класса GstoreConnector:
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)
}
Примечание:
При использовании GstoreConnector() значения по умолчанию для ip и port — 127.0.0.1 и 3305 соответственно.
При использовании build() путь rdf_file_path (второй параметр) должен быть связан с расположением gserver.
Не забудьте выгрузить загруженную базу данных, иначе могут возникнуть проблемы. (ошибки могут не сообщаться!)
Примеры использования python API см. в gStore/api/socket/python/example/PythonAPIExample. Файл Python не требует компиляции, и вы можете запускать его напрямую.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )