Без названия
iv_an_ru — 06.12.2019
Сегодня ночью я процедурой на 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 раз быстрее.
Теперь вам не составит труда расшифровать скороговорку в первом абзаце.
|
|
</> |
Потерял ключи от квартиры — кому звонить и что делать 
