RDF中度量单位本体的实用性如何?
我正在用RDF创建一个材料集合。我遇到了两种处理度量单位的方法:RDF中度量单位本体的实用性如何?,rdf,ontology,Rdf,Ontology,我正在用RDF创建一个材料集合。我遇到了两种处理度量单位的方法: 通过将描述性名称链接到RDF属性: prop:density prop:has单位为“kg/m3”。 a x:材料; 道具:密度“1676”` 使用现有的本体库,如。分配单元要复杂得多,因为它涉及到创建。请参见下面我如何为材质指定相同的密度: ax:物料; om:哈斯现象。 a om:密度; om:有价值。 a:度量; om:数值左值为1.676E3; om:hasUnit om:kg/立方米。 我已经回顾了不同的用例,但主要
prop:density prop:has单位为“kg/m3”。
a x:材料;
道具:密度“1676”`
ax:物料;
om:哈斯现象。
a om:密度;
om:有价值。
a:度量;
om:数值左值为1.676E3;
om:hasUnit om:kg/立方米。
我已经回顾了不同的用例,但主要集中在它们可以做什么,而不是它们如何做以及它是否实用。例如,如果您只想返回指定材质属性的所有值,那么使用单元本体会使查询变得更加复杂。还有一些本体没有涵盖的属性,例如表面粗糙度,目前还不清楚如何扩展它们
我更喜欢第一种方法。它更加干净、灵活,为用户提供了在典型数据库中无法获得的有用信息。我会尝试在应用程序端处理单位转换,因此我的首要任务是以查询友好的方式存储信息。我担心的是,通过采用这种方法,我将进一步限制功能。选择一种方法比另一种方法有什么主要的优点和缺点吗 问题中提到的问题是RDF社区中的一个已知问题,已在同行评审的论文中讨论过 关于问题中提到的第二种方法,人们可能会认为使用中间对象进行编写是完全不自然的。然而,描述事物测量的本体论可能是在考虑了几个方面之后编写的。例如,当某个对象在某个特定时刻膨胀时,可能需要中间对象来指定这些测量的时间。当然,有些情况下不需要这些附加说明 第一种方法的问题是,它完全将
prop:density
限制为仅一个单位。如果密度采用不同的单位,则必须执行转换
我认为在您的上下文中,一个简单的解决方案是引入特定的数据类型
@prefix x: <http://example.com/data> .
@prefix o: <http://example.com/ontology> .
x:MyBrick a x:Material;
o:density "1676"^^o:kg-m3.
如上所示,已经定义了一个附加的数据类型o:kg-l
。现在,使用相同的属性,可以指定以不同单位测量的密度。例如:
@prefix x: <http://example.com/data> .
@prefix o: <http://example.com/ontology> .
x:MyBrick1 a x:Material;
o:density "1676"^^o:kg-m3.
x:MyBrick2 a x:Material;
o:density "200"^^o:kg-l.
x:MyBrick3 a x:Material;
o:density "200a"^^o:kg-m3.
@前缀x:。
@前缀o:。
x:MyBrick1 a x:Material;
密度“1676”^^o:kg-m3。
x:MyBrick2 a x:材料;
密度为“200”^^o:kg-l。
x:MyBrick3 a x:材料;
密度“200a”^^o:kg-m3。
如上所述,定义了三个x:Material
实例及其各自的o:density
。查看上面的三元组,您会注意到在最后一个三元组中,o:density
的值是200a
。您将同意该值不是格式良好的密度值。此外,您可能想知道哪些对象,x:MyBrick1
或x:MyBrick2
,具有较高的密度。一致的RDF三元组存储将无法识别最后一个三元组中的值格式不正确。同样,一致SPARQL引擎将无法对o:density
值执行代数运算。然而,您可以定制RDF triplestore或SPARQL引擎的实现以满足这些需求。本文[1]介绍了如何实现这一点
这是一个有趣的选项概述。我认为使用cdt的定制数据类型:ucum是一种很好的方法;但是,我不清楚如何使用SPARQL来确定与返回的文本相关联的数据类型。例如,如果我的值为“0.842 kg/m3”^^^^或在您的情况下为o:kg-m3;除了返回数据类型为cdt:ucum或o:kg-m3的查询外,如何制定查询,以便处理器知道如何处理该值?@alkey,您可以在SPARQL 1.1中使用
datatype
函数。检查这个
@prefix x: <http://example.com/data> .
@prefix o: <http://example.com/ontology> .
x:MyBrick a x:Material;
o:density "1676"^^o:kg-m3.
@prefix o: <http://example.com/ontology> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
o:kg-m3 a rdfs:Datatype;
rdfs:label "Kilogram per metric cube datatype (kg/)";
rdfs:comment "A datatype to type densities measured in kilogram per meter cube" .
o:kg-l a rdfs:Datatype;
rdfs:label "Kilogram per liter datatype";
rdfs:comment "A datatype to type densities measured in kilogram per liter cube" .
@prefix x: <http://example.com/data> .
@prefix o: <http://example.com/ontology> .
x:MyBrick1 a x:Material;
o:density "1676"^^o:kg-m3.
x:MyBrick2 a x:Material;
o:density "200"^^o:kg-l.
x:MyBrick3 a x:Material;
o:density "200a"^^o:kg-m3.