在运行时检查本体一致性

时间:2016-01-23 08:57:39

标签: protege apache-jena pellet

我有一个程序使用Jena加载在Protege中设计的.owl本体。我正在尝试使用Pellet进行推理,如果我在运行时添加一些语句来模型能够检查其一致性。例如,我有'Method','Signature'和'hasSignature'概念,其中hasSignature是一个对象属性。我有以下公理:

#!/usr/bin/python
import socket
socket_path = '/var/spool/nagios/cmd/livestatus'
def sendQuery(query):
    """
    INPUT: LQL string.
    OUPUT: query result in string.
    REF  : http://stackoverflow.com/questions/24730883/python-errno-23-socket-livestatus
    """
    s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
    s.connect(socket_path)
    s.send(query)
    s.shutdown(socket.SHUT_WR)

    answer = ''
    while True:
        data = s.recv(1024)
        answer += data
        if len(data) < 1024:
            break
    s.close()
    return answer

LQL = 'GET services\n' + \
      'Columns: host_name description state last_state_change last_time_critical\n' + \
      'Filter: scheduled_downtime_depth = 0 \n'     + \
      'Filter: host_scheduled_downtime_depth = 0\n' + \
      'Filter: in_notification_period = 1\n'        + \
      'Filter: state    = 2 \n'

print sendQuery(LQL)

当我添加一些实例语句以违反上述公理时,不会报告任何不一致。这是我的代码:

Method hasSignature exactly 1 Signature

怎么了?为什么它不起作用?

1 个答案:

答案 0 :(得分:1)

您尚未声明sign1sign2彼此不同。因此,由于两个人可能彼此sameAs,因此推理者已经确定这是唯一不会发生冲突的情况。因此本体论是一致的。

相关问题