我可以将以下乌龟文件上传到Virtuoso SPARQL端点,而不会出现错误或警告:
@base <> .
@prefix :<>.
@prefix xsd: <http://www.w3.org/2001/XMLSchema#>.
# wrong
:x :y "kind of?"^^xsd:boolean.
:x :y "whenever"^^xsd:date.
:x :y "2000-01-01"^^xsd:dateTime.
:x :y "2000-01-01-06:00"^^xsd:date.
:x :y "01012000"^^xsd:date.
:x :y "x"^^xsd:integer.
:x :y "-1"^^xsd:nonNegativeInteger.
:x :y "0"^^xsd:positiveInteger.
# correct
:x :y "2000-01-01"^^xsd:date.
:x :y "2000-01-01-06:00"^^xsd:dateTime.
:x :y "true"^^xsd:boolean.
:x :y "false"^^xsd:boolean.
:x :y "-5"^^xsd:integer.
:x :y "0"^^xsd:nonNegativeInteger.
:x :y "1"^^xsd:positiveInteger.
整数值在上载时转换为“ 0”,但日期和整数子类型按给定的方式上载。
是否存在预定义的过程或另一种标准化的方法来检查我的文字是否符合SPARQL查询中的数据类型?
这是我为xsd:date
,xsd:dateTime
,xsd:boolean
,xsd:integer
和子类型想到的:
select *
{
?s ?p ?o.
filter(!isIRI(?o)).
bind(datatype(?o) as ?type)
filter
(
(?type=xsd:boolean&&xsd:boolean(?o)!=?o)
|| (?type=xsd:date&&xsd:date(?o)!=?o)
|| (?type=xsd:integer&&xsd:int(?o)!=?o)
|| ((?type=xsd:positiveInteger) && (xsd:int(?o)!=?o||xsd:int(?o)<1))
|| ((?type=xsd:nonNegativeInteger) && (xsd:int(?o)!=?o||xsd:int(?o)<0))
)
}
但是对于那些没有时间的dateTimes和有时间的日期,它不会显示警告:
:x :y "2000-01-01"^^xsd:dateTime.
:x :y "2000-01-01-06:00"^^xsd:date.
答案 0 :(得分:2)
如何处理错误和警告是所使用工具的功能。如评论中所述,"kind of?"^^xsd:boolean
是合法文字。根据数据类型,它是非法的。 RDF解析器可能不了解数据类型。
该应用可以在发送数据之前对其进行验证。否则,服务器日志中可能会出现警告。
用于解析数据的在线服务(不要用于任何大事!)
http://www.sparql.org/data-validator.html
基于Apache Jena。
警告是(除了由于具有相对URI <>
的前缀而引起的警告之外):
[line: 6, col: 7 ] Lexical form 'kind of?' not valid for datatype XSD boolean
[line: 8, col: 7 ] Lexical form 'whenever' not valid for datatype XSD date
[line: 9, col: 7 ] Lexical form '2000-01-01' not valid for datatype XSD dateTime
[line: 12, col: 7 ] Lexical form '01012000' not valid for datatype XSD date
[line: 14, col: 7 ] Lexical form 'x' not valid for datatype XSD integer
[line: 15, col: 7 ] Lexical form '-1' not valid for datatype XSD nonNegativeInteger
[line: 16, col: 7 ] Lexical form '0' not valid for datatype XSD positiveInteger
[line: 21, col: 7 ] Lexical form '2000-01-01-06:00' not valid for datatype XSD dateTime
SPARQL测试
xsd:dateTime(str(?o)) = ?o
以此类推,对于其他数据类型(请注意额外的“ str”)是个好主意。