文本的xsd数据类型是否有子类?
我正在尝试在任何推理系统或三库提供的加载时验证之外建立一些轻量级的按需数据验证。我用的是GraphDB 8.3 假设我使用生物医学调查本体(OBI)加载以下三元组:文本的xsd数据类型是否有子类?,xsd,sparql,rdf,owl,graphdb,Xsd,Sparql,Rdf,Owl,Graphdb,我正在尝试在任何推理系统或三库提供的加载时验证之外建立一些轻量级的按需数据验证。我用的是GraphDB 8.3 假设我使用生物医学调查本体(OBI)加载以下三元组: 如果有任何这样的本体论,它们肯定是定制用户设计的。我不知道有任何W3C标准具有这种效果。这个()图显示整数是从decimal“派生”而来的,尽管我不确定它在多大程度上可以用作ersatz子类或任何类似的类型。XSD数据类型没有子类。有派生类型:xsd:int是xsd:integer的派生类型;它是XSD定义的特性 xsd:int不是
如果有任何这样的本体论,它们肯定是定制用户设计的。我不知道有任何W3C标准具有这种效果。这个()图显示整数是从decimal“派生”而来的,尽管我不确定它在多大程度上可以用作ersatz子类或任何类似的类型。XSD数据类型没有子类。有派生类型:
xsd:int
是xsd:integer
的派生类型;它是XSD定义的特性
xsd:int
不是xsd:double
的派生类型
数据类型中重要的是值:“100”^^xsd:int
和“100”^^xsd:double
是相同的值。沙克可以表达这一点
在某种程度上,请参见《规范》中的“原子类型”。例如,见:
但是,如果没有任何推理程序来执行此操作,则必须在多个数据类型的公共间隔和值上复制数据类型推理。要回答您的问题: 所有整数都包含在双精度浮点数集中。(对吗?) 错了!正如您所说,
xsd:double
包含一组双精度浮点数,其中不包含像格雷厄姆数和其他大整数这样的数字
是否有一个现有的本体说xsd:int
是xsd:double
的子对象?
PREFIX : <http://example.com/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX obo: <http://purl.obolibrary.org/obo/>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
# loaded obi into http://example.com/ontology
select distinct ?stype ?p ?ptype ?propdom ?proprange ?otype ?odatatype where {
{
graph :data
{
?s ?p ?o .
bind (datatype(?o) as ?odatatype)
}
optional {
graph <http://example.com/ontology> {
values ?ptype {
owl:ObjectProperty owl:DatatypeProperty
}
?p a ?ptype
}
}
optional {
?o a ?otype
}
optional {
?s a ?stype
}
optional {
{
graph <http://example.com/ontology> {
?p rdfs:domain ?propdom
}
}
}
optional {
{
graph <http://example.com/ontology> {
?p rdfs:range ?proprange
}
}
}
}
minus
{
?s rdf:type ?o
}
# minus
# {
# ?odatatype rdfs:subClassOf+ ?proprange
# }
filter ( ?odatatype != ?proprange )
}
如果有(我怀疑有),它与XSD规范不一致(见上面的评论)
除此之外,我应该添加一个事实,即XSD将XSD:decimal
的值空间定义为与XSD:double
的值空间不相交。这意味着xsd:int
的值空间也与xsd:double
的值空间不相交
一般来说,我建议尽可能使用
xsd:decimal
而不是xsd:double
xsd:double
表明,使用您的数据或本体的系统永远不可能处理比xsd:double
创建有用答案的提示更精确或更大的数字。如果您要引用提问者的内容,请突出显示文本,然后按下双引号图标。它将格式化文本,使其与您的答案分开。欢迎来到StackOverflow,我喜欢这个例子。在这种情况下,我可能不得不依赖triplestore的加载时间验证器。我将发布我的经历….>好吧,根据标准,这有点真实,也有点虚假。这是XSD标准的一个非常奇怪的事实。xsd:int
和xsd:double
的值空间是不相交的,这意味着无论“100”^^xsd:int
表示什么值,它都应该不同于“100”^^xsd:double
表示的值。然而,对xsd:int
和xsd:double
的值空间的描述表明,它们都包含数字,正如预期的那样(即,在示例中是数字100)。从推理者的角度来看(在RDF、RDFS、OWL DL、OWL Full语义中),规范并没有做到这一切。xsd:int
的值和xsd:double
的值是不相交的。然而,对于支持XSD推理的RDF,或者对于OWL,所有XSD:int
s也都是XSD:decimal
s,并且在OWL中(但不在RDF中),隐含了rdfs:subassof
和XSD:decimal
之间的关系。
PREFIX : <http://example.com/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX obo: <http://purl.obolibrary.org/obo/>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
# loaded obi into http://example.com/ontology
select distinct ?stype ?p ?ptype ?propdom ?proprange ?otype ?odatatype where {
{
graph :data
{
?s ?p ?o .
bind (datatype(?o) as ?odatatype)
}
optional {
graph <http://example.com/ontology> {
values ?ptype {
owl:ObjectProperty owl:DatatypeProperty
}
?p a ?ptype
}
}
optional {
?o a ?otype
}
optional {
?s a ?stype
}
optional {
{
graph <http://example.com/ontology> {
?p rdfs:domain ?propdom
}
}
}
optional {
{
graph <http://example.com/ontology> {
?p rdfs:range ?proprange
}
}
}
}
minus
{
?s rdf:type ?o
}
# minus
# {
# ?odatatype rdfs:subClassOf+ ?proprange
# }
filter ( ?odatatype != ?proprange )
}