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中描述这个逻辑.任何的想法?
提前感谢任何意见或建议.
您想要做的事情似乎更好地处理,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,因为它可以通过自定义程序更好/更有效地解决.