4

关于语义网的初学者问题。

我有一个颜色知识库,其中包括相似的颜色、颜色修饰符(深色、浅色、〜ish 等)、颜色关系(更深、更亮)、颜色同义词等。我试图弄清楚 RDF/OWL 是否是操作(主要是查询)这个 KB 的好选择。以下是我需要支持的查询。

1) 找出与给定颜色相似的所有颜色。如果我用“相似”谓词表示颜色相似性,则可以使用简单的 Sparql 查询。同义词和关系也是如此。好的。

2) 当我需要查找标记或短语 x 是否为有效颜色时,问题变得更加棘手。如果 x 是未修改的颜色,则可以通过创建 Color 类并确保所有已知颜色都是该类的实例来解决问题。但是如果 x 是像 "redish" 这样的修改颜色呢?显然,一种解决方案是通过显式添加所有修改后的颜色来将它们包含在 KB 中。

但是,是否可以将所有修改后的颜色自动添加到 RDF 中?换句话说,是否有可能定义一类需要所有修改颜色的修改颜色?这需要一些连接运算符。这有可能吗?

另一种解决方案是有一些逻辑来分解 x 并检查 a)它是否包含已知的修饰符和 b)修改的东西是否是有效的颜色。当然,我也希望在 RDF/OWL 中描述这个逻辑。任何想法?

提前感谢您的任何意见或建议。

4

1 回答 1

5

IMO,使用您最喜欢的编程语言编写的自定义代码似乎可以更好地处理您想要做的事情。在 OWL 中很难表达这些东西,当然效率也不高。

但是FWIW,这是您可以做的事情。系好安全带,开始高级 OWL 2 建模之旅。假设您有基本颜色“蓝色”、“绿色”、“红色”。您可以定义包含三个字符串的数据类型(我使用 Turtle 语法):

:baseColor  a  rdfs:Datatype;
    owl:equivalentClass  [
        a  rdfs:Datatype;
        owl:withRestrictions ( [ xsd:pattern "blue|green|red" ] )
    ] .

然后您可以定义修改后的颜色:

:modColor  a  rdfs:Datatype;
    owl:equivalentClass  [
        a  rdfs:Datatype;
        owl:withRestrictions (
            [ xsd:pattern "(dark|light)?(blue|green|red)(ish)?" ]
        )
    ] .

您甚至可以拥有更多的数据类型,例如:lightColor, :darkColor, mediumColor.

然后创建一个:Color具有数据类型属性的类:hasColor

:hasColor  a  owl:DatatypeProperty;
    rdfs:domain  :Color;
    rdfs:range  [
        a  rdfs:Dataype;
        owl:unionOf  ( :baseColor :modColor )
    ]
:Color  a  owl:Class;
    rdfs:subClassOf  [
       a  owl:Restriction;
       owl:onProperty  :hasColor;
       owl:someValuesFrom  xsd:string
    ];
    owl:hasKey  ( :hasColor ) .

在这里,我强加:Color至少有一个颜色字符串的实例,并且我强加颜色字符串是颜色的唯一标识符(它是一个键)。因此,每当我使用其颜色字符串给出颜色时,我都可以验证该字符串是否在上面给出的正则表达式模式中。假设我定义了数据类型和:darkColor,我也可以表达和关系::lightColor:mediumColor:darker:lighter

:DarkColor  a  owl:Class;
    rdfs:subClassOf  :Color, [
        a  owl:Restriction;
        owl:onProperty  :hasColor;
        owl:allValuesFrom  :darkColor
    ] .
:LightColor  a  owl:Class;
    rdfs:subClassOf  :Color, [
        a  owl:Restriction;
        owl:onProperty  :hasColor;
        owl:allValuesFrom  :lightColor
    ] .
:MediumColor  a  owl:Class;
    rdfs:subClassOf  :Color, [
        a  owl:Restriction;
        owl:onProperty  :hasColor;
        owl:allValuesFrom  :mediumColor
    ] .

然后你想说 all :DarkColors:darker比 all:MediumColor和 all :LightColor。这样的公理并不容易实现,因为它需要引入辅助项。All Elephants are Bigger than All Mice一文中对此进行了解释,在 DL 术语中,它被称为概念产品:

:p1  a  owl:ObjectProperty . # auxiliary property (do not reuse elsewhere)
:p2  a  owl:ObjectProperty . # idem
:x  a  owl:Thing .           # auxiliary individual
:darker  owl:propertyChainAxiom ( :p1 :p2 ) .
:DarkColor  rdfs:subClassOf  [
    a  owl:Restriction;
    owl:onProperty  :p1;
    owl:hasValue  :x
] .
[ owl:unionOf ( :LightColor :MediumColor ) ] rdfs:SubClassOf  [
    a  owl:Restriction;
    owl:onProperty  [ owl:inverseOf :p2 ];
    owl:hasValue  :x
] .

对 做同样的事情:lighter

您不能真正自动引入修改后的颜色。您确实必须提供一个包含所有基色 + 修饰符的图案。但这可以很容易地以编程方式完成。在任何情况下,我给出的 OWL 代码都不应该使用,IMO,因为定制程序可以更好/更有效地解决它。

于 2012-08-30T09:15:22.693 回答