在RDF图的Turtle序列化中,我有很多像这样的三元组(许多个体,都具有常见的类型值):
:A a :b .
:B a :b .
:C a :b .
:D a :b .
# …
:Z a :b .
Run Code Online (Sandbox Code Playgroud)
有没有办法在乌龟中简洁地写这个?在SPARQL中,它与Turtle有一些相似之处,我们可以写:
:b ^a :A, :B, :C, …, :Z .
Run Code Online (Sandbox Code Playgroud)
在龟中有对应物吗?
我有一个像这样的 JSON:
{
"aggregation": {
"CityAgg" : {
"key" : "Paris"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我创建映射,并为每个字段添加 a ,@SerializedName因为我想为变量创建自定义名称。
例如,在 JSON 中,有一个键名称key,但我希望 Java 中的变量是cityName。
所以,我这样做:
@SerializedName("key")
public String cityName
Run Code Online (Sandbox Code Playgroud)
我可以将响应 JSON 动态映射到我的对象,如下所示:
Gson gson = new Gson();
Query2 query2 = gson.fromJson(response, Query2.class);
Run Code Online (Sandbox Code Playgroud)
它工作得很好。
但是,当我想打印映射的对象时,我会这样做:
String query2String = gson.toJson(query2);
Gson gsonPretty = new GsonBuilder().setPrettyPrinting().create();
String prettyJson = gsonPretty.toJson(query2String);
Run Code Online (Sandbox Code Playgroud)
问题是,在 中prettyJson,我可以看到key,而不是cityName。
我想知道是否有办法定制它。我不想看到key。
这是我动态调用方法的代码:
String[] parameters = new String[requiredParameters.length];
//here i put some values in the parameters array
method = TestRecommendations.class.getMethod("level1ClassSimilarityForUser",
String[].class);
System.out.println(":" + parameters[0] + ":");
results = (ResultSet) method.invoke(new TestRecommendations(), parameters)
Run Code Online (Sandbox Code Playgroud)
parameters是一个字符串数组,这是我的level1ClassSimilarityForUser方法的声明
public ResultSet level1ClassSimilarityForUser(String[] userURI) {
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
java.lang.IllegalArgumentException: argument type mismatch
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
Run Code Online (Sandbox Code Playgroud) 这是我的查询:
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rs: <http://www.welovethesemanticweb.com/rs#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
construct {
?subject0 rs:similarityValue ?similairty0.
?subject1 rs:similarityValue ?similairty1
}
WHERE {
{
?subject0 ?predicate0 ?object0.
rs:Impromptu_No._1 ?predicate0 ?object0.
?predicate0 rs:hasSimilarityValue ?similairty0Helper.
BIND(?similairty0Helper * (4/9) AS ?similairty0)
FILTER (?subject0 != rs:Impromptu_No)
}
union {
?subject1 ?predicate ?object.
?object ?predicate1 ?object1.
?predicate1 rs:hasSimilarityValue ?similairty1Helper.
rs:Impromptu_No._1 ?predicateHelper ?objectHelper.
?objectHelper ?predicate1 ?object1
BIND(?similairty1Helper * (1/9) AS ?similairty1)
FILTER (?subject1 != rs:Impromptu_No._1)
}
}
Run Code Online (Sandbox Code Playgroud)
结果是:
rs:5th_Symphony
rs:similarityValue
0.011111111111111112e0 .
rs:Polonaise_heroique
rs:similarityValue
0.011111111111111112e0 , 0.17777777777777778e0 , …Run Code Online (Sandbox Code Playgroud) 我有以下过滤器,可以将我的数据过滤到上周的项目.
#just consider the likes in the last one week.
filter (?ratingDate >= "2017-03-01T00:00:00"^^xsd:dateTime )
Run Code Online (Sandbox Code Playgroud)
如你所见,我在手中设置了上周的日期时间(硬编码),有没有办法自动设置这个日期?
我正在寻找像现在这样的东西- 7天
这是我的最低数据:
@prefix : <http://example.org/rs#>
:item :hasContext [:weight 0.1 ; :doNotRecommend true] , [:weight 0.2 ] .
:anotherItem :hasContext [:weight 0.4] , [ :weight 0.5 ] .
Run Code Online (Sandbox Code Playgroud)
如您所见,每个item都有一个或多个 hasContext,它的对象hasContext是一个可以有doNotRecommed谓词的实例。
我想要的是,如果这些实例之一(hasContext 的对象)包含 donNotRecommed,我希望总和为零。** 和总和我的意思是权重的总和**,所以换句话说,如果该属性存在,忽略所有权重(无论它们是否存在),只需将其设为零
select ?item (SUM(?finalWeight) as ?summedFinalWeight) {
?item :hasContext ?context .
optional
{
?context :doNotRecommend true .
bind( 0 as ?cutWeight)
}
optional
{
?context :weight ?weight .
}
bind ( if(bound(?cutWeight), ?cutWeight , if(bound(?weight), ?weight, 0.1) ) …Run Code Online (Sandbox Code Playgroud) 这是查询和结果:
如您所见,我正在过滤掉那些用户,bo:ania为什么他们仍然出现?
但是,如果我删除宽卡并仅选择用户?user,bo:ania则不会出现
我没有提供最小数据示例,因为这是关于过滤器和通配符如何工作的问题,而不是从数据集中提取某些数据的问题.但是,如果您需要最低限度的数据,我非常乐意提供.
这是我的查询
PREFIX : <http://example.org/rs#>
select ?item (SUM(?similarity) as ?summedSimilarity)
(group_concat(distinct ?becauseOf ; separator = " , ") as ?reason) where
{
values ?x {:instance1}
{
?x ?p ?instance.
?item ?p ?instance.
?p :hasSimilarityValue ?similarity
bind (?p as ?becauseOf)
}
union
{
?x a ?class.
?item a ?class.
?class :hasSimilarityValue ?similarity
bind (?class as ?becauseOf)
}
filter (?x != ?item)
}
group by ?item
Run Code Online (Sandbox Code Playgroud)
在我的第一bind个子句中,我不仅要绑定变量?p,还要绑定变量?instance。另外,添加像that is why.
所以第一次绑定应该导致以下结果:
?p that is why ?instance …
我正在检查如果实例具有特定谓词的值,则将该值绑定到特定变量,否则,将该变量绑定到整数类型的值1.这是我的代码
select ?boosted where {
:r1 a ?x
optional
{
?item rs:boostedBy ?boostedOptional
bind (if(bound(?boostedOptional), ?boostedOptional, "1"^^xsd:integer) as ?boosted)
}
}
Run Code Online (Sandbox Code Playgroud)
提升的价值总是空的,请看
告诉我为什么?
我认为你不需要数据来测试我的代码无法正常工作的原因,因为对我来说这听起来像是使用绑定的一般错误.但是,如果你想要数据,我会给你数据.
从第一个位置开始没有rs:boostedBy谓词,所以我希望始终保持默认值,在这种情况下,它是1的整数类型.
这是重现问题所需的最少数据
@prefix : <http://example.org/rs#>
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
:artist1 rdf:type :Artist .
:artist2 rdf:type :Artist .
:artist3 rdf:type :Artist .
:en rdf:type :Language .
:it rdf:type :Language .
:gr rdf:type :Language .
:c1
rdf:type :CountableClass ;
:appliedOnClass :Artist ;
:appliedOnProperty :hasArtist
.
:c2
rdf:type :CountableClass ;
:appliedOnClass :Language ;
:appliedOnProperty :hasLanguage
.
:i1
rdf:type :RecommendableClass ;
:hasArtist :artist1 ;
:hasLanguage :en
.
:i2
rdf:type :RecommendableClass ;
:hasArtist :artist1 ;
:hasLanguage :en
.
:i3
rdf:type :RecommendableClass;
:hasArtist :artist1 ; …Run Code Online (Sandbox Code Playgroud)