RDF/OWL中的字符串操作

use*_*750 4 rdf semantic-web owl sparql

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

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

1)找到与给定颜色相似的所有颜色.如果我用"类似"谓词表示颜色相似性,那么简单的Sparql查询就可以了.同义词和关系也是如此.好.

2)当我需要查找令牌或短语x是否是有效颜色时,问题变得更加棘手.如果x是未修改的颜色,则可以通过创建Color类并确保所有已知颜色都是该类的实例来解决问题.但是如果x是一种像"红色"的修饰颜色呢?显然,一种解决方案是通过明确地添加它们来使所有修改后的颜色成为KB的一部分.

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

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

提前感谢任何意见或建议.

Ant*_*ann 5

您想要做的事情似乎更好地处理,IMO,用您喜欢的编程语言的自定义代码片段.很难在OWL中表达这类事物,当然也没有效率.

但是FWIW,这是你可以做的事情.系好安全带,开始前往高级OWL 2造型.假设你有基本颜色"蓝色","绿色","红色".您可以定义包含三个字符串的数据类型(我使用Turtle语法):

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

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

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

你甚至可以有更多的数据类型,如: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 ) .
Run Code Online (Sandbox Code Playgroud)

在这里,我强加了: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
    ] .
Run Code Online (Sandbox Code Playgroud)

然后,你想说的是,所有的:DarkColors为:darker比所有:MediumColor,所有:LightColor.这种公理并非易于实现,因为它要求引入辅助术语.文章中解释了All Elephants比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
] .
Run Code Online (Sandbox Code Playgroud)

做同样的事情:lighter.

您无法自动引入修改后的颜色.你真的必须提供一个包含所有基色+修饰符的模式.但这可以通过编程方式轻松完成.在任何情况下,我都不应该使用我提供的OWL代码,IMO,因为它可以通过自定义程序更好/更有效地解决.