Skip to content

Commit cae7f15

Browse files
committed
Fix #1
1 parent 0eb18fc commit cae7f15

File tree

3 files changed

+66
-28
lines changed

3 files changed

+66
-28
lines changed

index.html

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,22 @@
1212
<body>
1313
<h1>Hello world!</h1>
1414
<h2>Tip: Check your console</h2>
15-
<p>Write a query selecting "?x" and "?x_label"</p>
15+
<p>Write a query selecting "?x" and "?x_label", and "?y"</p>
16+
<p>
17+
<pre>
18+
SELECT ?country ?country_label ?code
19+
WHERE {
20+
?country a &lt;http://dbpedia.org/ontology/Country> .
21+
?country &lt;http://www.w3.org/2000/01/rdf-schema#label> ?country_label.
22+
?country &lt;http://dbpedia.org/ontology/iso31661Code> ?code.
23+
}
24+
</pre>
25+
26+
</p>
1627
<span style="font-size:90%;">
1728
Queries sent to <a id="endpoint" href="http://fr.dbpedia.org/sparql">http://fr.dbpedia.org/sparql</a>
1829
</span>
30+
1931
<div id="yasqe"></div>
2032
<div id="yasr"></div>
2133
</body>
@@ -35,8 +47,29 @@ <h2>Tip: Check your console</h2>
3547
Yasr.registerPlugin("LabelledUriTable",SparnaturalYasguiPlugins.TableX);
3648
delete Yasr.plugins['table'];
3749
delete Yasr.plugins['response'];
50+
Yasr.plugins.LabelledUriTable.defaults.uriHrefAdapter = function(uri) {
51+
console.log("adapter called on uri "+uri);
52+
return uri;
53+
};
54+
Yasr.plugins.LabelledUriTable.defaults.bindingSetAdapter = function(bindingSet) {
55+
var newBindingSet = {};
56+
// console.log(bindingSet);
57+
for (var key in bindingSet) {
58+
if(key.startsWith("code")) {
59+
newBindingSet[key] = {
60+
type: "uri",
61+
value: "http://fake.uri/"+bindingSet[key].value
62+
};
63+
newBindingSet[key+"_label"] = bindingSet[key];
64+
} else {
65+
// default, don't change anything
66+
newBindingSet[key] = bindingSet[key];
67+
}
68+
}
69+
return newBindingSet;
70+
};
3871
const yasr = new Yasr(document.getElementById("yasr"), {
39-
pluginOrder: ["TableX"],
72+
pluginOrder: ["LabelledUriTable"],
4073
//this way, the URLs in the results are prettified using the defined prefixes in the query
4174
getUsedPrefixes : yasqe.getPrefixesFromQuery,
4275
"drawOutputSelector": false,

src/sparnatural-yasr-tablex-plugin/index.ts

Lines changed: 28 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ const DEFAULT_PAGE_SIZE = 50;
1818
export interface PluginConfig {
1919
openIriInNewWindow: boolean;
2020
tableConfig: DataTables.Settings;
21+
uriHrefAdapter?: ((uri:string) => string);
22+
bindingSetAdapter?: ((binding:Parser.Binding) => Parser.Binding);
2123
}
2224

2325
export interface PersistentConfig {
@@ -38,15 +40,20 @@ export class TableXResults implements Parser {
3840
private bindings: Parser.Binding[];
3941
private variables: string[];
4042

41-
constructor(parser: Parser) {
42-
var enhancedColumns = this.findColumnsToBeEnhanced(parser.getVariables());
43-
// this.bindings = parser.getBindings();
44-
this.bindings = parser.getBindings().map((binding) => this.enhanceBinding(binding, enhancedColumns));
45-
this.variables = parser.getVariables().filter((variable) =>
43+
constructor(parser: Parser, bindingSetAdapter?:((bindingSet:Parser.Binding) => Parser.Binding)) {
44+
this.bindings = parser.getBindings();
45+
// process complete binding sets
46+
if(bindingSetAdapter) {
47+
this.bindings = this.bindings.map((bindingSet) => bindingSetAdapter(bindingSet));
48+
}
49+
// add new bindings with labels + uris
50+
this.bindings = this.bindings.map((bindingSet) => this.enhanceBinding(bindingSet));
51+
// remove _label from list of variables
52+
this.variables = parser.getVariables().filter((variable) =>
4653
!(
4754
variable.endsWith("_label")
4855
&&
49-
enhancedColumns.includes(variable.substring(0, variable.length-("_label".length)))
56+
parser.getVariables().includes(variable.substring(0, variable.length-("_label".length)))
5057
)
5158
);
5259
}
@@ -63,20 +70,12 @@ export class TableXResults implements Parser {
6370
return null;
6471
}
6572

66-
private findColumnsToBeEnhanced(variables: string[]) : string[] {
67-
var result : string[] = [];
68-
for (const key in variables) {
69-
if(variables.includes(variables[key]+"_label")) {
70-
result.push(variables[key]);
71-
}
72-
}
73-
return result;
74-
}
75-
76-
private enhanceBinding(bindingSet: Parser.Binding, columnsToBeEnhanced: string[]) : Parser.Binding {
73+
private enhanceBinding(bindingSet: Parser.Binding) : Parser.Binding {
7774
var newBinding = {};
7875
for (var key in bindingSet) {
79-
if(columnsToBeEnhanced.includes(key)) {
76+
// if we find the same key woth _label in the binding set
77+
if(key+"_label" in bindingSet) {
78+
// then recreate a special binding in the binding set with the URI and the label
8079
var label = bindingSet[key+"_label"].value;
8180
newBinding[key] = {
8281
value: bindingSet[key].value,
@@ -86,12 +85,14 @@ export class TableXResults implements Parser {
8685
label: label
8786
}
8887
} else if(
88+
// if the key ends with xxx_label and the key xxx exists in the binding set, then ignore it
8989
key.endsWith("_label")
9090
&&
91-
columnsToBeEnhanced.includes(key.substring(0, key.length-("_label".length)))
91+
key.substring(0, key.length-("_label".length)) in bindingSet
9292
) {
9393
// don't include it in bindings
9494
} else {
95+
// otherwise just include as normal
9596
newBinding[key] = bindingSet[key];
9697
}
9798
}
@@ -142,8 +143,8 @@ export class TableX implements Plugin<PluginConfig> {
142143

143144
// ***** TableX MODIFICATION
144145
private postProcessRawResults(results: Parser | undefined) : Parser | undefined {
145-
if(results) {
146-
return new TableXResults(results);
146+
if(results) {
147+
return new TableXResults(results, this.config.bindingSetAdapter);
147148
}
148149
}
149150
// ***** end TableX MODIFICATION
@@ -168,6 +169,7 @@ export class TableX implements Plugin<PluginConfig> {
168169
},
169170
},
170171
},
172+
uriHrefAdapter:undefined,
171173
};
172174
private getRows(): DataRow[] {
173175
if (!this.results) return [];
@@ -180,8 +182,10 @@ export class TableX implements Plugin<PluginConfig> {
180182
}
181183

182184
private getUriLinkFromBinding(binding: Parser.BindingValue, prefixes?: { [key: string]: string }) {
183-
const href = binding.value;
184-
let visibleString = href;
185+
// ***** TableX MODIFICATION
186+
const href = (this.config.uriHrefAdapter)?this.config.uriHrefAdapter(binding.value):binding.value;
187+
let visibleString = binding.value;
188+
// ***** TableX MODIFICATION
185189
let prefixed = false;
186190
if (prefixes) {
187191
for (const prefixLabel in prefixes) {
@@ -203,7 +207,7 @@ export class TableX implements Plugin<PluginConfig> {
203207

204208
// ***** TableX MODIFICATION
205209
private getLabelledUriLinkFromBinding(binding: any) {
206-
const href = binding.value;
210+
const href = (this.config.uriHrefAdapter)?this.config.uriHrefAdapter(binding.value):binding.value;
207211
let visibleString = binding.label;
208212

209213
// Hide brackets when prefixed or compact

webpack.config.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ const stylesHandler = "style-loader";
1010
const config = {
1111
entry: "./src/index.ts",
1212
output: {
13-
path: path.resolve(__dirname, "dist"),
13+
path: path.resolve(__dirname, "dist")
1414
},
1515
devServer: {
1616
open: true,
@@ -74,7 +74,8 @@ module.exports = () => {
7474
library: {
7575
name: 'SparnaturalYasguiPlugins',
7676
type: 'umd'
77-
}
77+
},
78+
filename: "sparnatural-yasgui-plugins.js"
7879
}
7980

8081
return config;

0 commit comments

Comments
 (0)