我试图在任何推理系统或三重存储提供的加载时验证之外设置一些轻量级的按需数据验证。我正在使用GraphDB 8.3。
我们假设使用生物医学调查的本体论(OBI)加载以下三元组,http://purl.obolibrary.org/obo/obi.owl:
PREFIX : <http://example.com/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
insert data {
graph :data
{
:measurement1 a <http://purl.obolibrary.org/obo/IAO_0000032> ;
<http://purl.obolibrary.org/obo/IAO_0000004> "100.1"^^xsd:double .
:measurement2 a <http://purl.obolibrary.org/obo/IAO_0000032> ;
<http://purl.obolibrary.org/obo/IAO_0000004> "100"^^xsd:int .
}
}
这表示:measurement1
和:measurement2
有测量值。 <http://purl.obolibrary.org/obo/IAO_0000004>
的范围是xsd:double
。我知道我可以通过下面的查询检查与指定范围完全相同的数据类型。
正如您在我的查询中嵌入的评论中所看到的,我想说:measurement2
的{{1}}值是可以接受的,因为所有整数都包含在其中一组双精度浮点数。 (右?)
现有的本体是否表示"100"^^xsd:int
是xsd:int
的子事?
xsd:double
答案 0 :(得分:3)
XSD数据类型没有子类。有派生类型:xsd:int
是xsd:integer
的派生类型;它是XSD定义的功能。
xsd:int
不派生类型xsd:double
。
数据类型中重要的是值:"100"^^xsd:int
和"100"^^xsd:double
是相同的值。 SHACL可以表达这一点。
答案 1 :(得分:2)
回答你的问题:
所有整数都包含在双精度浮点数集合中。 (右?)
错误!如你所说,xsd:double
包含一组双精度浮点数,它不包含格雷厄姆数和其他大整数等数字。
现有的本体是否表示
xsd:int
是xsd:double
的子事?
如果有(我怀疑有),它与XSD的规格不一致(见上面的评论)。
为此,我应该补充一个事实,即XSD将xsd:decimal
的值空间定义为与xsd:double
不相交。这意味着xsd:int
的值空间也与xsd:double
的值空间不相交。
一般情况下,我建议您尽可能使用xsd:decimal
而不是xsd:double
。 xsd:double
表明,使用您的数据或本体的系统永远不可能处理更好的精确度或更大的数量xsd:double
。
答案 2 :(得分:1)
如果有任何此类本体,它们肯定是自定义用户设计的。我不知道有任何W3C标准。这个(https://www.w3.org/TR/xmlschema-2/#built-in-datatypes)图显示了从十进制“派生”的整数,但我不确定它可以在多大程度上用作ersatz subClassOf或任何类型。
答案 3 :(得分:1)
在某种程度上,规范就是这样做的。例如,请参阅:https://www.w3.org/TR/swbp-xsch-datatypes/#sec-values
但是,如果没有任何推理人员这样做,您就必须在多个数据类型共有的时间间隔和值上复制数据类型推理。