2012-05-23 2 views
1

У меня есть некоторые ограничения, такие как объектЧтение ограничения рестрикции с использованием Jena

hasVendor some Vendor 
hasYear some integer[minLength 2, maxLength 4, >=1995, <=2012] 
hasPrice only string[pattern "/^[0-9]+(\.[0-9]{2})?$/"] 

, где поставщик является классом. Я выполнил инструкции по этой ссылке: https://stackoverflow.com/a/7805455/1138148, чтобы прочитать ограничения. Мне нужно получить значения ограничений от каждого из этих ограничений, используя Йену. Я был в состоянии получить 'Vendor' как ограничение в первом случае, но для 2-го и 3-я получаю какую-то фигню, как ценности, как:

7cbf42c2:137784f42b4:-7d1f и 7cbf42c2:137784f42b4:-7d29 соответственно. Каковы эти ценности? Как получить шаблон как таковой и значения minLength, 1995 и т. Д.

ответ

1

Это идентификаторы bnode для промежуточных узлов в этих ограничениях. В результирующих данных есть намного больше «материала», чем показано, когда он сериализуется в синтаксисе Манчестера. Вы захотите проверить OWL to RDF mappings document на w3c, чтобы узнать больше о том, как это происходит.

Я не предлагаю сделать валидацию самостоятельно. Если вы собираетесь представлять этот материал в OWL, вы можете использовать аргументацию, чтобы рассказать вам, когда что-то нарушило ограничение. Это будет работать по большей части, но есть некоторые подводные камни вокруг open-world против закрытого мира, которые вам нужно знать, чтобы действительно сделать эту работу. Вы также можете посмотреть что-то вроде проверки целостности Integrity as offered by Pellet, которая позволяет писать ограничения в OWL и применять к ним замкнутую семантику, что дает более естественный (особенно, если вы исходите из мира РСУБД) способ работать с ними.

Но если вы должны вручную регулировать ограничения, вам нужно будет немного углубиться в основную структуру RDF ограничений, чтобы получить нужные вам биты, или использовать API, который на самом деле разработан для работы с OWL, например OWLAPI.

+0

Спасибо. Я новичок в OWL и Йене. Поэтому, если у меня есть набор токенов, как я могу применить к нему своего аргумента и проверить, нарушает ли каждый токен ограничение или нет. Просьба привести пример кода. – Vijith

+1

У меня нет ни малейшего понятия, что вы подразумеваете под маркером. Если вы помещаете онтологию в аргументатора вместе с вашими данными, рассудитель скажет вам, если, между прочим, данные будут согласованы w.r.t с онтологией. То есть, было ли нарушено одно из ваших ограничений или других аксиом. Я настоятельно рекомендую вам прочитать праймер OWL и что-то о том, что такое аргумент open-world, поэтому у вас есть лучшее понимание того, как это работает. – Michael