我想借助 Python 的语义网络工具(最好是 owlready )解决 A. Einstein 著名的斑马难题。
起点是链接在https://github.com/RDFLib/OWL-RL/issues/3中的两个 owl 文件。第一个(XML 语法)按预期工作。第二个(不同的作者,n3海龟语法)无法加载或仅在owlready中“部分”加载。为了更容易理解我的步骤,我将它们记录在此笔记本中:https ://github.com/cknoll/demo-material/blob/main/expertise_system/einstein-zebra-puzzle-owlready-solution-attempt.ipynb 。
<Edit1>为了更好地参考,我包括了笔记本的基本部分:
import os
import owlready2 as owl2
data_path = "ontology_data"
path2 = os.path.join(data_path, "zebra.n3.txt") # original turtle syntax
path2 = os.path.join(data_path, "zebra.n3.txt.xml") # created with ontospy
onto = owl2.get_ontology(path2).load()
list(onto.classes()) # -> empty list -> loading seems to have failed
# now try xml syntax
# create a new world
owl2.default_world = owl2.World()
onto = owl2.get_ontology(path2x).load()
list(onto.classes()) # -> expected result
list(onto.properties()) # -> expected result
onto.hasPet # -> expected result
# unexpected/wrong:
onto.individuals # -> empty list
list(onto.livesIn.get_relations()) # -> KeyError
</编辑1>
结论:我可以加载此本体的 XML 版本,但我无法确认这些概念是否定义为owl:oneOf
-objects,也无法找到断言之类的位置
:Norwegian :livesIn :House1 .
:Norwegian :livesIn [ :isNextTo [ :hasColor :Blue ] ] .
告终。
我会很高兴得到一些提示。
(我认为,一旦正确表示了本体,就可以通过类似的方式获得解决方案sync_reasoner_pellet(infer_property_values=True, infer_data_property_values=True))