iv_an_ru (iv_an_ru) wrote,
iv_an_ru
iv_an_ru

Category:
Сегодня ночью я процедурой на Virtuoso/PL скомпилировал SHACL-для-SHACL-а в процедуру на Virtuoso/PL, которой проверил, что SHACL-для-SHACL-а действительно в SHACLе SHACL-для-SHACL-а.

RDF ведь очень бесформенный формат, в него можно что угодно запихать, вопрос только, что с этим "чем угодно" сможет делать читатель. Чтобы иметь возможность описать желаемую форму RDF-ных графов и описывать условия логической непротиворечивости этих графов, был разработан Shapes Constraint Language (SHACL). В документе на этом языке можно указать, например, что если у человека известна группа крови, то она у него только одна и может иметь только одно из значений некоторого списка, а если известны и дата рождения, и дата смерти, то первая меньше или равна второй. Если RDF-документ Y соответствует всем условиям, описанным в SHACL-документе X, то мы говорим, что у нас "Y в SHACLe X". Чтобы не проверять соответствие ручками, я пишу на Virtuoso/PL проверялку, которая на вход получает X и Y, и либо рапортует, что всё хорошо, либо выдаёт список "нарушений".

Это была присказка. Теперь учтём, что SHACL --- разновидность RDF. Значит, можно написать SHACL-для-SHACL-а, чтобы им проверять правильность SHACL-документов перед тем, как пробовать проверять ими RDF-документы. А в качестве "утренней зарядки" можно убедиться, что SHACL-для-SHACL-а действительно в SHACLе SHACL-для-SHACL-а.

Дальше веселее. Вот эта наша проверялка --- она откровенно неторопливая. Она вынуждена одним глазом косить в SHACL, а другим в проверяемый документ, и много-много раз перечитывать SHACL в процессе работы, выкусывая подробности нужных правил. Ну так можно же и побыстрее сделать, и я жизнерадостно пишу на Virtuoso/PL процедуру, которая скомпилирует данный ей SHACL X в такую программу на Virtuoso/PL, что если этой программе на вход подать RDF-документ Y, то он будет проверен на соответствие X. Получается в среднем в 30 раз быстрее.

Теперь вам не составит труда расшифровать скороговорку в первом абзаце.
Tags: rdbms
Subscribe

  • Пора устраивать идиотоцид под видом демократии.

    Афиняне могли совершенно демократическим путём приговорить город, который им не сделал ничего плохого, к убийству всех тамошних мужчин и обращению в…

  • (no subject)

    Почему я не ношу зимой шапку: 1. Шапка не гарантирует 100% защиты от мороза 2. Я не доверяю российским шапкам 3. Шапки плохо протестированы 4.…

  • Как я из пионера-ленинца стал антикоммунистом. Часть 2/2.

    Когда в Новосибирской области открылось областное отделение РИКО Госплана, оно осело не в облсовете или ещё где в центре города, а в нашей "деревне…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 9 comments