[英]String manipulation in RDF/OWL
关于语义网的初学者问题。
我有颜色的知识库,其中包括相似的颜色,颜色修改器(深色,浅色,〜ish等),颜色关系(较暗,更明亮),颜色同义词等。我试图弄清楚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" ] )
] .
然后,您可以定义修改的颜色:
:modColor a rdfs:Datatype;
owl:equivalentClass [
a rdfs:Datatype;
owl:withRestrictions (
[ xsd:pattern "(dark|light)?(blue|green|red)(ish)?" ]
)
] .
您甚至可以拥有更多的数据类型,例如:lightColor
, :darkColor
和mediumColor
。
然后,创建具有数据类型属性:hasColor
的类:Color
:
: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
] .
然后,您要说所有:DarkColor
都比所有:MediumColor
和所有:LightColor
:darker
。 这样的公理不是很容易实现的,因为它要求引入辅助术语。 在论文《 所有大象比所有老鼠都更大》中对此进行了解释,在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
做同样的事情。
您不能真正自动引入修改后的颜色。 您确实必须提供包含所有基色+修饰符的图案。 但这可以很容易地以编程方式完成。 无论如何,IMO不应该使用我提供的OWL代码,因为通过定制程序可以更好/更有效地解决该问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.