Sparql 如何在GraphDB中将xsd:dateTime文字转换为xsd:date?
我正在尝试将xsd:dateTime转换为xsd:date,以便能够仅按日期筛选对象。 但是通过在GraphDB中执行以下操作Sparql 如何在GraphDB中将xsd:dateTime文字转换为xsd:date?,sparql,graphdb,Sparql,Graphdb,我正在尝试将xsd:dateTime转换为xsd:date,以便能够仅按日期筛选对象。 但是通过在GraphDB中执行以下操作 PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> SELECT ?s ?e { VALUES (?start ?end) {("2011-02-02T14:45:14"^^xsd:dateTime "2011-02-04T14:45:13"^^xsd:dateTime)} BIND ( xsd:
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT ?s ?e {
VALUES (?start ?end) {("2011-02-02T14:45:14"^^xsd:dateTime "2011-02-04T14:45:13"^^xsd:dateTime)}
BIND ( xsd:date(?start) AS ?s)
BIND ( xsd:date(?end) AS ?e)
}
但正如大家在这里看到的
使用xsd:date函数。在GraphDB中创建javascript函数,如:
PREFIX jsfn:<http://www.ontotext.com/js#>
INSERT DATA {
[] jsfn:register '''
function convertDate(value) {
return new Date(value);
}
'''
}
前缀jsfn:
插入数据{
[]jsfn:注册''
函数日期(值){
返回新日期(值);
}
'''
}
验证函数是否已注册,或者:
PREFIX jsfn:<http://www.ontotext.com/js#>
SELECT ?s ?o {
?s jsfn:enum ?o
}
前缀jsfn:
选择?s?o{
?s jsfn:enum?o
}
然后按如下方式使用:
PREFIX jsfn:<http://www.ontotext.com/js#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT ?s ?e {
VALUES (?start ?end) {("2011-02-02T14:45:14"^^xsd:dateTime "2011-02-04T14:45:13"^^xsd:dateTime)}
BIND ( jsfn:convertDate(?start) AS ?s)
BIND ( jsfn:convertDate(?end) AS ?e)
}
前缀jsfn:
前缀xsd:
选择?s?e{
值(?开始?结束){(“2011-02-02T14:45:14”^^xsd:dateTime“2011-02-04T14:45:13”^^xsd:dateTime)}
绑定(jsfn:convertDate(?start)AS?s)
绑定(jsfn:convertDate(?end)AS?e)
}
返回的结果是:
[日期2011-02-02T14:45:14.000Z]
[日期2011-02-04T14:45:13.000Z]
希望这有帮助。在GraphDB中创建javascript函数,如:
PREFIX jsfn:<http://www.ontotext.com/js#>
INSERT DATA {
[] jsfn:register '''
function convertDate(value) {
return new Date(value);
}
'''
}
前缀jsfn:
插入数据{
[]jsfn:注册''
函数日期(值){
返回新日期(值);
}
'''
}
验证函数是否已注册,或者:
PREFIX jsfn:<http://www.ontotext.com/js#>
SELECT ?s ?o {
?s jsfn:enum ?o
}
前缀jsfn:
选择?s?o{
?s jsfn:enum?o
}
然后按如下方式使用:
PREFIX jsfn:<http://www.ontotext.com/js#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT ?s ?e {
VALUES (?start ?end) {("2011-02-02T14:45:14"^^xsd:dateTime "2011-02-04T14:45:13"^^xsd:dateTime)}
BIND ( jsfn:convertDate(?start) AS ?s)
BIND ( jsfn:convertDate(?end) AS ?e)
}
前缀jsfn:
前缀xsd:
选择?s?e{
值(?开始?结束){(“2011-02-02T14:45:14”^^xsd:dateTime“2011-02-04T14:45:13”^^xsd:dateTime)}
绑定(jsfn:convertDate(?start)AS?s)
绑定(jsfn:convertDate(?end)AS?e)
}
返回的结果是:
[日期2011-02-02T14:45:14.000Z]
[日期2011-02-04T14:45:13.000Z]
希望这有帮助。关于GraphDB Javascript函数的链接中的文档使用了一个不存在的函数
xsd:date
。出于某种原因,它并没有在发行版中结束
一些技术说明
作为参数传递给用户定义javascript函数的RDF值进行类型转换。org.eclipse.rdf4j.model.IRI
和org.eclipse.rdf4j.model.BNode
的实例按“原样”传递,但文本转换如下:
- 如果它是一个整数数据类型,例如(xsd:integer,xsd:long,xsd:int,xsd:byte,xsd:short,xsd:nonPositiveInteger,xsd:negativeInteger,xsd:nonNegativeInteger,xsd:positiveInteger,xsd:unsignedLong,xsd:unsignedInt,xsd:unsignedShort和xsd:unsignedByte)之一,则传递的值为
long
- 如果是:xsd:decimal、xsd:float或xsd:double中的一个,则传递的值是
double
- 如果它是:xsd:dateTime、xsd:date、xsd:time、xsd:gYearMonth、xsd:gMonthDay、xsd:gYear、xsd:gMonth或xsd:gDay中的一个,则传递的值是
javax.xml.datatype.xmlgoriancalendar
- 如果是持续时间,例如:xsd:duration、xsd:dayTimeDuration或xsd:yearMonthDuration中的一个,则传递的值是
javax.xml.datatype.duration的实例
- 最后,对于xsd:boolean是一个
boolean
- 对于其他内容,文本的标签为
String
ValueFactory
ascreateLiteral
方法中可用的内容,这些方法可以处理这些问题,包括xmlgoriiancalendar
。因此,如果没有特定的处理程序,则使用结果的字符串值来创建文本
在第一个答案的示例中,jsfn:convertDate
的结果类型为jdk.nashorn.internal.objects.NativeDate
,因此当结果的文本被创建时,插件调用它的toString
,从而产生类似于[Date 2011-02-02T14:45:14.000Z]
此外,插件中的脚本引擎只能访问以java.lang.
(不包括java.lang.Thread
)、org.eclipse.rdf4j.model.
和com.ontotext.trree.sdk.
考虑到上述注释和限制,将xsd:dateTime
转换为xsd:date
的javascript函数需要将与时间相关的日历值字段设置为DatatypeConstants.FIELD\u未定义
,实际上是整数.MIN\u值
,并通过RDF4J值工厂
构造一个文本:
PREFIX jsfn:<http://www.ontotext.com/js#>
INSERT DATA {
[] jsfn:register '''
function convertDate(value) {
value.setTime(java.lang.Integer.MIN_VALUE, java.lang.Integer.MIN_VALUE, java.lang.Integer.MIN_VALUE);
return org.eclipse.rdf4j.model.impl.SimpleValueFactory.getInstance().createLiteral(value);
}
'''
}
前缀jsfn:
插入数据{
[]jsfn:注册''
函数日期(值){
value.setTime(java.lang.Integer.MIN_值、java.lang.Integer.MIN_值、java.lang.Integer.MIN_值);
返回org.eclipse.rdf4j.model.impl.SimpleValueFactory.getInstance().createLiteral(值);
}
'''
}
HTH关于GraphDB Javascript函数的链接中的文档使用了一个不存在的函数
xsd:date
。出于某种原因,它并没有在发行版中结束
一些技术说明
作为参数传递给用户定义javascript函数的RDF值进行类型转换。org.eclipse.rdf4j.model.IRI
和org.eclipse.rdf4j.model.BNode
的实例按“原样”传递,但文本转换如下:
- 如果它是一个整数数据类型,例如(xsd:integer,xsd:long,xsd:int,xsd:byte,xsd:short,xsd:nonPositiveInteger,xsd:negativeInteger,xsd:nonNegativeInteger,xsd:positiveInteger,xsd:unsignedLong,xsd:unsignedInt,xsd:unsignedShort和xsd:unsignedByte)之一,则传递的值为
long
- 如果是:xsd:decimal、xsd:float或xsd:double中的一个,则传递的值是
double
- 如果它是:xsd:dateTime、xsd:date、xsd:time、xsd:gYearMonth、xsd:gMonthDay、xsd:gYear、xsd:gMonth或xsd:gDay中的一个,则传递的值是实例