文字的xsd数据类型是否具有子类?

时间:2017-09-22 16:04:16

标签: xsd sparql rdf owl graphdb

我试图在任何推理系统或三重存储提供的加载时验证之外设置一些轻量级的按需数据验证。我正在使用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:intxsd:int的子事?

xsd:double

4 个答案:

答案 0 :(得分:3)

XSD数据类型没有子类。有派生类型:xsd:intxsd:integer的派生类型;它是XSD定义的功能。

xsd:int 派生类型xsd:double

数据类型中重要的是值:"100"^^xsd:int"100"^^xsd:double是相同的值。 SHACL可以表达这一点。

请参阅https://www.w3.org/TR/xpath-datamodel-3/#types-hierarchy

中的“原子类型”

答案 1 :(得分:2)

回答你的问题:

  

所有整数都包含在双精度浮点数集合中。 (右?)

错误!如你所说,xsd:double包含一组双精度浮点数,它不包含格雷厄姆数和其他大整数等数字。

  

现有的本体是否表示xsd:intxsd:double的子事?

如果有(我怀疑有),它与XSD的规格不一致(见上面的评论)。

为此,我应该补充一个事实,即XSD将xsd:decimal的值空间定义为与xsd:double不相交。这意味着xsd:int的值空间也与xsd:double的值空间不相交。

一般情况下,我建议您尽可能使用xsd:decimal而不是xsd:doublexsd: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

但是,如果没有任何推理人员这样做,您就必须在多个数据类型共有的时间间隔和值上复制数据类型推理。