Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit33a0cf0

Browse files
committed
SelectBuilder plus unit test
1 parentdb43a4f commit33a0cf0

File tree

6 files changed

+184
-69
lines changed

6 files changed

+184
-69
lines changed

‎built/QueryBuilder.js‎

Lines changed: 41 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,84 +1,62 @@
1+
import{Parser}from'sparqljs';
12
exportclassQueryBuilder{
23
constructor(query){
3-
this.test={
4-
"type":"query",
5-
"prefixes":{
6-
"dbpedia-owl":"http://dbpedia.org/ontology/"
7-
},
8-
"queryType":"SELECT",
9-
"variables":["?p","?c"],
10-
"where":[
11-
{
12-
"type":"bgp",
13-
"triples":[
14-
{
15-
"subject":"?p",
16-
"predicate":"http://www.w3.org/1999/02/22-rdf-syntax-ns#type",
17-
"object":"http://dbpedia.org/ontology/Artist"
18-
},
19-
{
20-
"subject":"?p",
21-
"predicate":"http://dbpedia.org/ontology/birthPlace",
22-
"object":"?c"
23-
},
24-
{
25-
"subject":"?c",
26-
"predicate":"http://xmlns.com/foaf/0.1/name",
27-
"object":"\"York\"@en"
28-
}
29-
]
30-
}
31-
]
32-
};
334
this.query=query;
345
}
35-
staticfromString(){
6+
staticfromString(queryString,prefixes,baseIRI){
7+
letquery=newParser(prefixes,baseIRI).parse(queryString);
8+
if(!query)
9+
thrownewError("Only SPARQL queries are supported, not updates");
10+
returnnewQueryBuilder(query);
3611
}
37-
where(element){
12+
where(pattern){
13+
if(!this.getQuery().where)
14+
this.getQuery().where=[];
15+
this.getQuery().where.push(pattern);
3816
returnthis;
3917
}
40-
filter(varName,filter){
41-
this.query["where"].push(filter);
18+
filter(filter){
19+
this.where(filter);
4220
returnthis;
4321
}
4422
filterRegex(varName,pattern,caseInsensitive){
45-
varexpression={
23+
letexpression={
4624
"type":"operation",
4725
"operator":"regex",
48-
"args":[
49-
{
50-
"termType":"Variable",
51-
"value":varName
52-
},
53-
{
54-
"termType":"Literal",
55-
"value":pattern,
56-
"language":"",
57-
"datatype":{
58-
"termType":"NamedNode",
59-
"value":"http://www.w3.org/2001/XMLSchema#string"
60-
}
61-
}
62-
]
26+
"args":[("?"+varName),("\""+pattern+"\"")]
6327
};
64-
if(caseInsensitive===true)
65-
expression.args.push({
66-
"termType":"Literal",
67-
"value":"\"i\"",
68-
"language":"",
69-
"datatype":{
70-
"termType":"NamedNode",
71-
"value":"http://www.w3.org/2001/XMLSchema#string"
72-
}
73-
});
74-
varfilter={
28+
if(caseInsensitive)
29+
expression.args.push("\"i\"");
30+
letfilter={
7531
"type":"filter",
7632
"expression":expression
7733
};
78-
this.filter(varName,filter);
34+
this.filter(filter);
7935
returnthis;
8036
}
81-
build(){
37+
filterIn(varName,list){
38+
letexpression={
39+
"type":"operation",
40+
"operator":"in",
41+
"args":[("?"+varName),list]
42+
};
43+
letfilter={
44+
"type":"filter",
45+
"expression":expression
46+
};
47+
this.filter(filter);
48+
returnthis;
49+
}
50+
getQuery(){
8251
returnthis.query;
8352
}
53+
build(){
54+
returnthis.getQuery();
55+
}
56+
staticvariable(varName){
57+
return("?"+varName);
58+
}
59+
staticliteral(value){
60+
return("\""+value+"\"");
61+
}
8462
}

‎built/SelectBuilder.js‎

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import{Parser}from'sparqljs';
2+
import{QueryBuilder}from'./QueryBuilder';
3+
exportclassSelectBuilderextendsQueryBuilder{
4+
constructor(select){
5+
super(select);
6+
}
7+
staticfromString(queryString,prefixes,baseIRI){
8+
letquery=newParser(prefixes,baseIRI).parse(queryString);
9+
if(!query)
10+
thrownewError("Only SELECT is supported");
11+
returnnewSelectBuilder(query);
12+
}
13+
orderBy(ordering){
14+
if(!this.getSelectQuery().order)
15+
this.getSelectQuery().order=[];
16+
this.getSelectQuery().order.push(ordering);
17+
returnthis;
18+
}
19+
orderByVar(varName,desc){
20+
letordering={
21+
"expression":SelectBuilder.variable(varName),
22+
};
23+
if(desc!==undefined)
24+
ordering.descending=desc;
25+
returnthis.orderBy(ordering);
26+
}
27+
offset(offset){
28+
this.getSelectQuery().offset=offset;
29+
returnthis;
30+
}
31+
limit(limit){
32+
this.getSelectQuery().limit=limit;
33+
returnthis;
34+
}
35+
getSelectQuery(){
36+
returnthis.getQuery();
37+
}
38+
}

‎src/com/atomgraph/platform/query/QueryBuilder.ts‎

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,15 @@ export class QueryBuilder
1313
publicstaticfromString(queryString:string,prefixes?:{[prefix:string]:string;}|undefined,baseIRI?:string|undefined):QueryBuilder
1414
{
1515
letquery=newParser(prefixes,baseIRI).parse(queryString);
16-
if(!<Query>query)thrownewError("SPARQLupdates are notsupported");
16+
if(!<Query>query)thrownewError("OnlySPARQLqueries aresupported,notupdates");
1717

1818
returnnewQueryBuilder(<Query>query);
1919
}
2020

2121
publicwhere(pattern:Pattern):QueryBuilder
2222
{
23-
if(!this.query.where)this.query.where=[];
24-
this.query.where.push(pattern);
23+
if(!this.getQuery().where)this.getQuery().where=[];
24+
this.getQuery().where!.push(pattern);
2525

2626
returnthis;
2727
}
@@ -71,12 +71,22 @@ export class QueryBuilder
7171
returnthis;
7272
}
7373

74-
publicbuild():Object
74+
protectedgetQuery():BaseQuery
7575
{
7676
returnthis.query;
7777
}
7878

79-
publicstaticescapeLiteral(value:string):Term
79+
publicbuild():Object
80+
{
81+
returnthis.getQuery();
82+
}
83+
84+
publicstaticvariable(varName:string):Term
85+
{
86+
return<Term>("?"+varName);
87+
}
88+
89+
publicstaticliteral(value:string):Term
8090
{
8191
return<Term>("\""+value+"\"");
8292
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import{Parser,SelectQuery,Ordering}from'sparqljs';
2+
import{QueryBuilder}from'./QueryBuilder';
3+
4+
exportclassSelectBuilderextendsQueryBuilder
5+
{
6+
7+
constructor(select:SelectQuery)
8+
{
9+
super(select);
10+
}
11+
12+
publicstaticfromString(queryString:string,prefixes?:{[prefix:string]:string;}|undefined,baseIRI?:string|undefined):SelectBuilder
13+
{
14+
letquery=newParser(prefixes,baseIRI).parse(queryString);
15+
if(!<SelectQuery>query)thrownewError("Only SELECT is supported");
16+
17+
returnnewSelectBuilder(<SelectQuery>query);
18+
}
19+
20+
publicorderBy(ordering:Ordering):SelectBuilder
21+
{
22+
if(!this.getSelectQuery().order)this.getSelectQuery().order=[];
23+
this.getSelectQuery().order!.push(ordering);
24+
25+
returnthis;
26+
}
27+
28+
publicorderByVar(varName:string,desc?:boolean):SelectBuilder
29+
{
30+
letordering:Ordering={
31+
"expression":SelectBuilder.variable(varName),
32+
};
33+
if(desc!==undefined)ordering.descending=desc;
34+
35+
returnthis.orderBy(ordering);
36+
}
37+
38+
publicoffset(offset:number):SelectBuilder
39+
{
40+
this.getSelectQuery().offset=offset;
41+
42+
returnthis;
43+
}
44+
45+
publiclimit(limit:number):SelectBuilder
46+
{
47+
this.getSelectQuery().limit=limit;
48+
49+
returnthis;
50+
}
51+
52+
privategetSelectQuery():SelectQuery
53+
{
54+
return<SelectQuery>this.getQuery();
55+
}
56+
57+
}

‎test/com/atomgraph/platform/query/QueryBuilder.spec.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ describe('should build an equivalent query', () => {
1616
it('filterIn()',()=>{
1717
letquery="SELECT ?s { ?s ?p ?o }";
1818
letexpected="SELECT ?s { ?s ?p ?o FILTER (?s IN (<http://a>, \"b\", \"c\")) }";
19-
letactual=QueryBuilder.fromString(query).filterIn("s",[<Term>"http://a",QueryBuilder.escapeLiteral("b"),QueryBuilder.escapeLiteral("c")]).build();
19+
letactual=QueryBuilder.fromString(query).filterIn("s",[<Term>"http://a",QueryBuilder.literal("b"),QueryBuilder.literal("c")]).build();
2020

2121
expect(actual).to.deep.equal(newParser().parse(expected));
2222
});
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import{SelectBuilder}from'../../../../../src/com/atomgraph/platform/query/SelectBuilder';
2+
import{Parser,Term}from'sparqljs';
3+
import{expect}from'chai';
4+
import'mocha';
5+
6+
describe('should build an equivalent query',()=>{
7+
8+
it('orderByVar()',()=>{
9+
letquery="SELECT ?s { ?s ?p ?o }";
10+
letexpected="SELECT ?s { ?s ?p ?o } ORDER BY DESC(?s) ?p";
11+
letactual=SelectBuilder.fromString(query).orderByVar("s",true).orderByVar("p").build();
12+
13+
expect(actual).to.deep.equal(newParser().parse(expected));
14+
});
15+
16+
it('limit()',()=>{
17+
letquery="SELECT ?s { ?s ?p ?o }";
18+
letexpected="SELECT ?s { ?s ?p ?o } LIMIT 42";
19+
letactual=SelectBuilder.fromString(query).limit(42).build();
20+
21+
expect(actual).to.deep.equal(newParser().parse(expected));
22+
});
23+
24+
it('offset()',()=>{
25+
letquery="SELECT ?s { ?s ?p ?o }";
26+
letexpected="SELECT ?s { ?s ?p ?o } OFFSET 66";
27+
letactual=SelectBuilder.fromString(query).offset(66).build();
28+
29+
expect(actual).to.deep.equal(newParser().parse(expected));
30+
});
31+
32+
});

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp