Какой Triplestore для быстрой разработки семантической паутины?

Реализация кода, который вам требуется:

from kivy.config import Config
from kivy.core.window import Window
from kivy.app import App

from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.graphics import Rectangle, Color

mainscreen = BoxLayout(orientation='vertical')

label1 = Label(text='label_1', font_size=18, color=(0, 0, 0, 1), size_hint=(None, None))
label1.bind(texture_size=label1.setter('size'))
def update_rect(instance, *args):
    rect.pos = instance.pos
    rect.size = instance.size
with label1.canvas.before:
    Color(1, .5, 0, 1)
    rect = Rectangle(pos=label1.pos, size=label1.size)
label1.bind(pos=update_rect, size=update_rect)

label2 = Label(text='label_2', color=(0, 0, 0, 1))

mainscreen.add_widget(label1)
mainscreen.add_widget(label2)

class MyApp(App):
    def build(self):
        return mainscreen

if __name__ == '__main__':
    Config.set('input', 'mouse', 'mouse,multitouch_on_demand')
    Window.clearcolor = (1, 1, 1, 1)
    MyApp().run()

ИМХО реализация в kv более читаема и более гибка, когда выполняется связывание, как в случае метки, которая соответствует размеру. [1113 ]


from kivy.config import Config
from kivy.core.window import Window
from kivy.app import App

from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.graphics import Rectangle, Color

from kivy.properties import ListProperty


class CustomLabel(Label):
    bgcolor = ListProperty([0, 0, 0, 1])
    def __init__(self, **kwargs):
        if kwargs.get('bgcolor'):
            self.bgcolor = kwargs['bgcolor']
            kwargs.pop('bgcolor')
        super(CustomLabel, self).__init__(**kwargs)
        self.bind(texture_size=self.setter('size'))

        with self.canvas.before:
            self.p = Color(*self.bgcolor)
            self.rect = Rectangle(pos=self.pos, size=self.size)

        self.on_bgcolor()
        self.bind(pos=self.geometry_bind, size=self.geometry_bind)

    def on_bgcolor(self, *args):
        self.p.rgba = self.bgcolor

    def geometry_bind(self, *args):
        self.rect.pos = self.pos
        self.rect.size = self.size


class MyApp(App):
    def build(self):
        mainscreen = BoxLayout(orientation='vertical')
        label1 = CustomLabel(text='label_1', font_size=18, color=(0, 0, 0, 1), size_hint=(None, None), bgcolor=(1, .5, 0, 1))
        label2 = Label(text='label_2', color=(0, 0, 0, 1))
        mainscreen.add_widget(label1)
        mainscreen.add_widget(label2)
        return mainscreen

if __name__ == '__main__':
    Config.set('input', 'mouse', 'mouse,multitouch_on_demand')
    Window.clearcolor = (1, 1, 1, 1)
    MyApp().run()

Объяснение:

  • bind : функция bind(foo_property = callback) отвечает за вызов обратного вызова когда изменяется foo_property.

  • setter : функция setter('foo_property') генерирует обратный вызов, который позволяет вам установить значение.

Если вы присоединитесь к обеим функциям:

class FooClass(Foo_EventDispatcher):
    property_a = FooProperty(initial_value_a)
    property_b = FooProperty(initial_value_b)

    def __init__(self, **kwargs):
       super(FooClass, self).__init__(**kwargs)
       self.bind(property_a=self.setter('property_b'))

эквивалентно следующей инструкции в .kv:

:
    property_b: self.property_a

9
задан dajobe 6 September 2009 в 22:36
поделиться

7 ответов

Я также рекомендовал бы сезам, его легкий вес, довольно легкий устанавливать, и обеспечиваю хорошую производительность для небольших наборов данных. Производительность запросов намного лучше с Сезамом 1.2.x, чем Сезам 2.x из-за добавления поддержки контекста 2.x ряд.

Я протестировал установку/развертывание сезама с котом, смолой и причалом, и это работало легко со всеми ними. Я не рекомендую привязку к компонентам RDBMS, таким как Пост-ГРЭС или MySQL, по крайней мере, в 1.x ряд, производительность не была приемлема, даже для опытных приложений. И собственные реализации в оперативной памяти обеспечивают хорошую производительность запросов и предлагают простую персистентность, хотя они испытывают недостаток в истинных транзакциях.

Йена имеет достойный API и намного больше поддержки баз данных, reasoners, и т.д., но имеет большее место и является немного более громоздкой для использования в целом.

8
ответ дан 4 December 2019 в 07:24
поделиться

Я был впечатлен ARC2 как предложение PHP/MySQL. Веб-сайт проекта имеет полезное "Начало работы" разбудить Вас и выполнение быстро, и вопросы/проблемы обращены быстро в списке рассылки. В зависимости от того, что Вы пытаетесь сделать, SPARQLscript, дополнение мини-языка к ARC2 для обработки результатов запроса может быть очень полезным.

5
ответ дан 4 December 2019 в 07:24
поделиться

Проверьте Библиотеку Семантической паутины SWI-пролога. Должно быть очень простым в использовании, даже с небольшим знанием Пролога.

3
ответ дан 4 December 2019 в 07:24
поделиться

Мы используем сезам. Это реализовано в Java поэтому, у Вас будет межплатформенная поддержка. Если Вы - удобная работа с Tomcat, должно быть довольно легко установить.

3
ответ дан 4 December 2019 в 07:24
поделиться

Если вы разработчик .NET, вас может заинтересовать Intellidimensions Semantic SDK . Если вы хотите загрузить график в память, а затем выполнить запросы SPARQL к этому графику, код будет таким же простым, как:

var gds = new GraphDataSource();
gds.Read<RdfXmlReader>(File.ReadAllText(@"C:\graph.owl"));
Table results = gds.Query("select ?s ?p ?o where {?s ?p ?o} limit 10");

Если вы студент или исследователь, они обычно предоставляют бесплатную лицензию, если вы связываетесь с ними.

1
ответ дан 4 December 2019 в 07:24
поделиться

Увеличение версии сборки (GPL) дает вам (почти) все необходимое для управления версией ваших сборок.

Некоторые функции (скопированы с сайта):

  • Различные стили автоматического увеличения могут быть установлены для основного, вспомогательного номера, номера сборки или версии.
  • Поддерживает проекты C #, VB.NET и C ++. NET.
  • Не требуется для установки всеми участниками проекта. Конфигурация передается через свойства в файлах решения и проекта. Разработчики, у которых нет надстройки, ничего не почувствуют.
  • Автоматически проверяет необходимые файлы, если они находятся под контролем версий.
  • Можно настроить для каждого решения и / или проекта.
  • Можно настроить на обновление только в определенных сборках конфигурации (отладка, выпуск, любая или настраиваемая)
  • Может обновлять атрибуты сборки во внешнем исходном файле вместо AssemblyInfo по умолчанию.
1
ответ дан 4 December 2019 в 07:24
поделиться

Если вы знакомы с Ruby, с библиотекой RDF.rb можно очень быстро начать работу; установка через RubyGems так же проста, как:

$ sudo gem install rdf

В дополнение к работе с данными RDF в памяти, доступные в настоящее время адаптеры хранилища RDF.rb включают SQLite, PostgreSQL, MongoDB, Cassandra, RedStore и Sesame.

Загрузка и анализ данных RDF из Интернета также не может быть проще:

graph = RDF::Graph.load("http://datagraph.org/jhacker/foaf.rdf")

См. Страницу проекта RDF.rb для учебных пособий, примеров кода и документации по API.

2
ответ дан 4 December 2019 в 07:24
поделиться