1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/opensci-gStore

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
API.md 22 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 27.11.2024 22:42 364e048

В этом разделе рассказывается, как использовать наш API для доступа к gStore. Мы предоставляем HTTP API (рекомендуемый) и Socket API, соответствующие ghttp и gserver соответственно.

HTTP API

По сравнению с 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.


Структура 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/

          • GstoreConnector.java
      • example/

        • Benckmark.java

        • GETexample.java

        • POSTexample.java

        • Makefile

    • python/ (Python API)

      • example/

        • Benchmark.py

        • GET-example.py

        • POST-example.py

      • src/

        • GstoreConnector.py
    • 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/

        • GstoreConnector.php

API для C++

Интерфейс

Чтобы использовать 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 с заданными IP, портом, именем пользователя и паролем

gc = GstoreConnector.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) print(res)

запросить и сохранить результат в файле с именем «ans.txt»

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)

получить CoreVersion и APIVersion

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();
}

Примечание:

  1. При использовании Connector() значения по умолчанию для ip и port — 127.0.0.1 и 3305 соответственно.

  2. При использовании build() путь rdf_file_path (второй параметр) должен быть связан с расположением gserver.

  3. Не забудьте выгрузить загруженную базу данных, иначе могут возникнуть проблемы. (ошибки могут не сообщаться!)

Запуск

Инструкции по использованию PHP API см. в gStore/api/socket/php/PHPAPIExample. Скрипт PHP не требует компиляции. Вы можете запустить файл PHP напрямую или использовать его в своём веб-проекте.


Python API

Интерфейс

Чтобы использовать 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)
}

Примечание:

  1. При использовании GstoreConnector() значения по умолчанию для ip и port — 127.0.0.1 и 3305 соответственно.

  2. При использовании build() путь rdf_file_path (второй параметр) должен быть связан с расположением gserver.

  3. Не забудьте выгрузить загруженную базу данных, иначе могут возникнуть проблемы. (ошибки могут не сообщаться!)

Запуск

Примеры использования python API см. в gStore/api/socket/python/example/PythonAPIExample. Файл Python не требует компиляции, и вы можете запускать его напрямую.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/opensci-gStore.git
git@api.gitlife.ru:oschina-mirror/opensci-gStore.git
oschina-mirror
opensci-gStore
opensci-gStore
master