【问题标题】:String manipulation in RDF/OWLRDF/OWL 中的字符串操作
【发布时间】:2012-08-24 20:25:51
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

    标签: rdf sparql semantic-web owl


    【解决方案1】:

    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:darkColormediumColor

    然后你创建一个类: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
        ] .
    

    那么你想说所有:DarkColors 都是:darker,而不是所有:MediumColor 和所有: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,因为定制程序可以更好/更有效地解决它。

    【讨论】:

    • 感谢您的回答。很有意思。因此,最有效的解决方案似乎是显式添加所有修改后的颜色。
    猜你喜欢
    • 2011-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 2015-05-29
    • 2018-01-18
    相关资源
    最近更新 更多