我正在尝试将Excel电子表格导入Owl,Protege 5.2.0。我已经插入Cellfie,可以使用它在MappingMasterDSL中编写规则来处理Excel单元格。我将通过一个简单的示例向您介绍我要尝试做的事情。
我处理的工作表如下:
我有一个原始的本体,看起来像这样,其中颜色和营养是描述水果的属性:
导入到Protege后,我想要实现的效果如下,在右侧介绍了Blueberry
和Apple
。
到目前为止,我想出的导入规则是:
Class: @A*
EquivalentTo:(
((@B1(ObjectProperty) some @B*([",([^,]+),"])) or // Matching term in between two commas
(@B1(ObjectProperty) some @B*([",([^,]+)$"])) or // Matching end of line
(@B1(ObjectProperty) some @B*(["^([^,]+)],"])) or // Matching beginning of line
(@B1(ObjectProperty) some @B*(["([^,]+)"]))) // Matching single value (when there's no comma)
and
((@C1(ObjectProperty) some @C*([",([^,]+),"])) and
(@C1(ObjectProperty) some @C*([",([^,]+)$"])) and
(@C1(ObjectProperty) some @C*(["^([^,]+),"])) and
(@C1(ObjectProperty) some @C*(["([^,]+)"])))
)
由以上代码生成的创建的公理有点混乱。 Blueberry
的描述为:
Apple
的描述是:
所以有两个问题:
您可以看到some
之后有一些空值。显然是因为模式不适用于该单元格。
如果一个单元格中有许多逗号分隔的术语,则只会找到与特定模式匹配的一个术语。
所以问题是:
如何使模式可选?
如何编写捕获所有用逗号分隔的术语的递归规则。
非常感谢您的帮助!
仅供参考,Cellfie的MappingMasterDSL:https://github.com/protegeproject/mapping-master/wiki/MappingMasterDSL
正则表达式模式:https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html