为 RDF 图中的文字定义数据类型有什么好处?
What is the benefit of defining datatypes for literals in an RDF graph?
我在 Python 中使用 rdflib 构建我的第一个 rdf 图。但是,我不明白定义 Literal 数据类型的明确目的。我已经翻阅了文档并使用 google 和 Whosebug 搜索进行了尽职调查,但我似乎找不到对此的实际解释。为什么不将所有内容都保留为普通的旧文字?
根据我的试验,这是否可以让您使用 BIND 在 Sparql 查询中搜索明确的术语?这也有助于过滤吗?即 FILTER (?var1 > ?var2),其中 var1 和 var2 应该表示 integers/floats/etc?对查询速度有帮助吗?还是我完全偏离了方向?
具体来说,为什么要将以下三元组添加到 mygraph
mygraph.add((amazingrdf, ns['hasValue'], Literal('42.0', datatype=XSD.float)))
而不只是这个?
mygraph.add((amazingrdf, ns['hasValue'], Literal("42.0")))
我怀疑我忽略了某些目的。感谢您的帮助和解释 - 我想第一次就学会这个!谢谢!
比较 SPARQL 中的两个 xsd:integer
值:
ASK { FILTER (9 < 15) }
结果:正确。现在 xsd:string
:
ASK { FILTER ("9" < "15") }
结果:false,因为排序字符串时,9在1之后。
一些等式检查 xsd:decimal
:
ASK { FILTER (+1.000 = 01.0) }
结果为真,是同一个数字。现在 xsd:string
:
ASK { FILTER ("+1.000" = "01.0") }
错误,因为它们是明显不同的字符串。
用 xsd:integer
做一些数学运算:
SELECT (1+1 AS ?result) {}
它 returns 2(作为 xsd:integer
)。现在对于字符串:
SELECT ("1"+"1" AS ?result) {}
它 returns “11” 作为 xsd:string
,因为添加字符串被解释为字符串连接(至少在耶拿我试过这个;在其他 SPARQL 引擎中,添加两个字符串可能是一个错误,什么都不返回)。
如您所见,使用正确的数据类型对于将您的意图传达给处理数据的代码非常重要。 SPARQL 示例非常清楚地说明了这一点,但是当直接使用 RDF API 时,围绕对象标识、排序等会出现相同类型的问题。
如上例所示,SPARQL 为 xsd:string
、xsd:integer
和 xsd:decimal
(以及 xsd:boolean
和 language-标记的字符串)。这将这些数据类型提升到其他数据类型之上。
我在 Python 中使用 rdflib 构建我的第一个 rdf 图。但是,我不明白定义 Literal 数据类型的明确目的。我已经翻阅了文档并使用 google 和 Whosebug 搜索进行了尽职调查,但我似乎找不到对此的实际解释。为什么不将所有内容都保留为普通的旧文字?
根据我的试验,这是否可以让您使用 BIND 在 Sparql 查询中搜索明确的术语?这也有助于过滤吗?即 FILTER (?var1 > ?var2),其中 var1 和 var2 应该表示 integers/floats/etc?对查询速度有帮助吗?还是我完全偏离了方向?
具体来说,为什么要将以下三元组添加到 mygraph
mygraph.add((amazingrdf, ns['hasValue'], Literal('42.0', datatype=XSD.float)))
而不只是这个?
mygraph.add((amazingrdf, ns['hasValue'], Literal("42.0")))
我怀疑我忽略了某些目的。感谢您的帮助和解释 - 我想第一次就学会这个!谢谢!
比较 SPARQL 中的两个 xsd:integer
值:
ASK { FILTER (9 < 15) }
结果:正确。现在 xsd:string
:
ASK { FILTER ("9" < "15") }
结果:false,因为排序字符串时,9在1之后。
一些等式检查 xsd:decimal
:
ASK { FILTER (+1.000 = 01.0) }
结果为真,是同一个数字。现在 xsd:string
:
ASK { FILTER ("+1.000" = "01.0") }
错误,因为它们是明显不同的字符串。
用 xsd:integer
做一些数学运算:
SELECT (1+1 AS ?result) {}
它 returns 2(作为 xsd:integer
)。现在对于字符串:
SELECT ("1"+"1" AS ?result) {}
它 returns “11” 作为 xsd:string
,因为添加字符串被解释为字符串连接(至少在耶拿我试过这个;在其他 SPARQL 引擎中,添加两个字符串可能是一个错误,什么都不返回)。
如您所见,使用正确的数据类型对于将您的意图传达给处理数据的代码非常重要。 SPARQL 示例非常清楚地说明了这一点,但是当直接使用 RDF API 时,围绕对象标识、排序等会出现相同类型的问题。
如上例所示,SPARQL 为 xsd:string
、xsd:integer
和 xsd:decimal
(以及 xsd:boolean
和 language-标记的字符串)。这将这些数据类型提升到其他数据类型之上。