Pull to refresh
1
0
Павел Клинов @klextor

User

Send message
Можно. Stardog и AllegroGraph — это RDF СУБД. Neo4j — это графовая СУБД. Различия эти на уровне API постепенно стираются мульти графы и RDF (как модели данных) в общем-то отображаются друг в друга. Поэтому neo4j может хранить RDF и поддерживает SPARQL (по-моему для этого есть плагин), а Stardog скоро будет поддерживать TinkerPop API 3.0 для работы с произвольными property graphs (я как раз над этим сейчас работаю).

Но надо понимать что несмотря на близость на уровне API физически хранилища все равно оптимизированы под немного разные задачи. RDF ближе к реляционной модели, просто менее жестко структурированной и легче модифицируемой, и SPARQL удобен как аналог SQL, т.е. для запросов по шаблону, которые возвращают часть RDF графа, соответствующую шаблону. Графовая модель и языки запросов лучше приспособлены для вычислений на графах, всяческих traversals, shortest paths, PageRank и тому подобного. Но поддержка TinkerPop'a скоро позволит эти вещи делать и над графами в Stardog (но храниться они все равно будут как RDF).

Отличительная особенность Stardog'a — reasoning. О нем можно говорить долго.

Stardog сделан на собственном движке хранения данных. Sesame поддерживается в клиентских API (т.е. можно работать с БД в Stardog как с репозиториями Sesame) + в качестве парсера RDF (т.н. Sesame Rio но эту часть мы перепишем как дойдут руки). Marmotta не используется.
Единственное что, ML (на knowledge graphs или на других данных) — это не попытка выиграть масштабируемость за счет выразительности. Для этого есть специальные «легковесные» подмножества OWL, т.н. profiles (OWL EL, OWL QL, OWL RL). Они имеют полиномиальную сложность и отлично масштабируются для своих задач (например, data complexity для запросов в OWL QL аналогична SQL). Выразительности там немного.

ML интересен потому что сами основы вывода другие. Логика становится индуктивной т.е. из больших наборов данных выводятся некие знания, например, предсказания как в докладе в твоем блоге, которые дедуктивно, как в стандартных логиках, оттуда никак не следуют, какая бы масштабируемость ни была.

PS. Только не путать индуктивную логику с мат. индукцией. Смысл термина «индукция» у них абсолютно разный.
Пиши, конечно. ML уже появился у нас в roadmap на Stardog 4+. Правда не в топе приоритетов пока.
Не сможете, т.к. это утверждение уже второго порядка, а не первого. Есть всякие трюки мета-моделирования, от примитивных (аннотации в OWL) до хитрых (Henkin semantics), но в стандарте этого нет.

Можно выражать свойства всех объектов данного класса (тем самым определяя класс как множество объектов с определенными свойствами), но не свойство класса как такогого.

Хорошо это описано в статье On the Properties of Metamodeling in OWL, см. пример с орлами и Красной Книгой в начале. В КК занесены именно орлы как сущность, а не каждый живущий в мире орел как объект.
Не получится. Единственный способ ограничить сверху количество элементов класса — это использовать номиналы (явное перечисление объектов класса), что заставит таки присвоить идентификаторы. По-другому никак не получится выразить конечность множества. Собственно без equality (а номиналы в OWL — это фактически equality в логике первого порядка + синтаксический сахар) в логике первого порядка нельзя выразить конечность интерпретации унарного предиката. Это следует, например, из теоремы Löwenheim–Skolem

Если логический вывод не нужен, то можно в RDF использовать blank nodes для ваших шаров. Это фактически способ выразить факт о существовании объекта, не генерируя для него идентификатор. Но в любом случае считать вероятности придется с помощью каких-то своих методов, в стандартном стеке (RDF, RDFS, OWL) таких инструментов нет.
Семантика OWL DL целиком выражается в наивной теории множеств, где есть множества, отношения и элементы. Т.е. individual интерпретируется как элемент. Класс — как множество. Свойство — как бинарное отношение.

Есть тонкость под названием punning: когда один и тот же IRI используется и для класса и для элемента. Но это чисто синтаксическая фича.
Во-первых, в OWL действительно можно выразить не все. Это тривиально следует из того, что OWL DL — подмножество логики первого порядка (более того — разрешимого фрагмента FOL). Соответственно, все что невыразимо в FOL, невыразимо и в OWL. Кроме того, есть известные конструкции, выразимые в FOL, но невыразимые в OWL, например, ограничения кардинальности на транзитивных свойствах.

Во-вторых, не совсем справедливо утверждать что в OWL рассматриваются только триплеты (это так в RDF). Связь OWL и RDF несколько сложнее, чем обычно объясняется в курсах (я пока не читал как Алик ее объяснял). Обычно n-арные отношения выражаются через реификацию, т.е. промежуточные сущности для представления аксиом. Подробнее можно почитать здесь:

Defining N-ary Relations on the Semantic Web

Information

Rating
Does not participate
Location
Германия
Registered
Activity