我有一个程序使用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
怎么了?为什么它不起作用?
答案 0 :(得分:1)
您尚未声明sign1
和sign2
彼此不同。因此,由于两个人可能彼此sameAs
,因此推理者已经确定这是唯一不会发生冲突的情况。因此本体论是一致的。