solid-ui
Version:
UI library for writing Solid read-write-web applications
776 lines (652 loc) • 32.4 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.bindingToTerm = bindingToTerm;
exports.loadFromBindings = loadFromBindings;
exports.ESCOResultToBindings = ESCOResultToBindings;
exports.queryESCODataByName = queryESCODataByName;
exports.queryPublicDataByName = queryPublicDataByName;
exports.queryPublicDataSelect = queryPublicDataSelect;
exports.queryPublicDataConstruct = queryPublicDataConstruct;
exports.loadPublicDataThing = loadPublicDataThing;
exports.getWikidataDetails = getWikidataDetails;
exports.getWikidataDetailsOld = getWikidataDetailsOld;
exports.getWikidataLocation = getWikidataLocation;
exports.getDbpediaDetails = getDbpediaDetails;
exports.variableNameToPredicateMap = exports.wikidataIncomingClassMap = exports.wikidataParameters = exports.wikidataOutgoingClassMap = exports.dbPediaTypeMap = exports.dbpediaParameters = exports.escoParameters = exports.fetcherOptionsJsonPublicData = exports.instituteDetailsWikidataQuery = exports.wikidataClasses = exports.AUTOCOMPLETE_LIMIT = void 0;
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _rdflib = require("rdflib");
var debug = _interopRequireWildcard(require("../../../debug"));
var ns = _interopRequireWildcard(require("../../../ns"));
var _logic = require("../../../logic");
var _language = require("./language");
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
/* Logic to access public data stores
*
* including filtering resut by natural language etc
* See https://solidos.solidcommunity.net/public/2021/01%20Building%20Solid%20Apps%20which%20use%20Public%20Data.html
*/
/* eslint-disable no-console */
// import * as logic from '../../../logic'
var AUTOCOMPLETE_LIMIT = 200; // How many to get from server
// With 3000 we could exceed the wikidata timeout
exports.AUTOCOMPLETE_LIMIT = AUTOCOMPLETE_LIMIT;
var subjectRegexp = /\$\(subject\)/g;
// Schema.org seems to suggest NGOs are non-profit and Corporaions are for-profit
// but doesn't have explicit classes
var wikidataClasses = {
Corporation: 'http://www.wikidata.org/entity/Q6881511',
// Enterprise is for-profit
EducationalOrganization: 'http://www.wikidata.org/entity/Q178706',
// insitution
GovernmentOrganization: 'http://www.wikidata.org/entity/Q327333',
// government agency
MedicalOrganization: 'http://www.wikidata.org/entity/Q4287745',
MusicGroup: 'http://www.wikidata.org/entity/Q32178211',
// music organization
NGO: 'http://www.wikidata.org/entity/Q163740',
// nonprofit organization @@
Occupation: 'http://www.wikidata.org/entity/Q28640',
// Profession
// Organization: 'http://www.wikidata.org/entity/Q43229',
Project: 'http://www.wikidata.org/entity/Q170584',
SportsOrganization: 'http://www.wikidata.org/entity/Q4438121'
};
exports.wikidataClasses = wikidataClasses;
var instituteDetailsWikidataQuery = "prefix vcard: <http://www.w3.org/2006/vcard/ns#>\nCONSTRUCT\n{ wd:Q49108 vcard:fn ?itemLabel.\nwd:Q49108 rdf:type ?klass. ?klass rdfs:label ?klassLabel; rdfs:comment ?klassDescription .\nwd:Q49108 schema:logo ?logo;\n schema:image ?image;\n schema:logo ?sealImage;\n schema:subOrganization ?subsidiary .\n ?subsidiary rdfs:label ?subsidiaryLabel .\n ?supersidiary schema:subOrganization wd:Q49108 .\n ?supersidiary rdfs:label ?supersidiaryLabel .\n wd:Q49108 schema:location ?location .\n ?location schema:elevation ?elevation .\n ?location wdt:P131 ?region . ?region rdfs:label ?regionLabel .\n ?location wdt:P625 ?coordinates .\n ?location schema:country ?country . ?country rdfs:label ?countryLabel .\n}\nWHERE\n{ optional {wd:Q49108 rdfs:label ?itemLabel} .\n optional {wd:Q49108 wdt:P154 ?logo .}\n optional {wd:Q49108 wdt:P31 ?klass .}\n optional {wd:Q49108 wdt:P158 ?sealImage .}\n optional {wd:Q49108 wdt:P18 ?image .}\n\n optional { wd:Q49108 wdt:P355 ?subsidiary . }\n optional { ?supersidiary wdt:P355 wd:Q49108. }\n\n optional { wd:Q49108 wdt:P276 ?location .\n\n optional { ?location schema:eleveation ?elevation }\n optional { ?location wdt:P131 ?region }\n optional { ?location wdt:P625 ?coordinates }\n optional { ?location wdt:P17 ?country }\n }\n SERVICE wikibase:label { bd:serviceParam wikibase:language \"fr,en,de,it\". }\n}";
exports.instituteDetailsWikidataQuery = instituteDetailsWikidataQuery;
var fetcherOptionsJsonPublicData = {
credentials: 'omit',
// try to avoid CORS problems. Data is public so no auth
headers: new Headers({
Accept: 'application/json'
})
};
exports.fetcherOptionsJsonPublicData = fetcherOptionsJsonPublicData;
var escoParameters = {
label: 'ESCO',
logo: _logic.kb.sym('https://ec.europa.eu/esco/portal/static_resource2/images/logo/logo_en.gif'),
searchByNameURI: 'https://ec.europa.eu/esco/api/search?language=$(language)&type=occupation&text=$(name)' // endpoint: undefined
// returnFormat: 'ESCO',
// targetClass: {}
};
exports.escoParameters = escoParameters;
var dbpediaParameters = {
label: 'DBPedia',
logo: _logic.kb.sym('https://upload.wikimedia.org/wikipedia/commons/thumb/7/73/DBpediaLogo.svg/263px-DBpediaLogo.svg.png'),
searchByNameQuery: "select distinct ?subject, ?name where {\n ?subject a $(targetClass); rdfs:label ?name\n FILTER regex(?name, \"$(name)\", \"i\")\n } LIMIT $(limit)",
endpoint: 'https://dbpedia.org/sparql/'
};
exports.dbpediaParameters = dbpediaParameters;
var dbPediaTypeMap = {
AcademicInsitution: 'http://umbel.org/umbel/rc/EducationalOrganization'
};
exports.dbPediaTypeMap = dbPediaTypeMap;
var wikidataOutgoingClassMap = {
AcademicInsitution: 'http://www.wikidata.org/entity/Q4671277',
Enterprise: 'http://www.wikidata.org/entity/Q6881511',
Business: 'http://www.wikidata.org/entity/Q4830453',
NGO: 'http://www.wikidata.org/entity/Q79913',
CharitableOrganization: 'http://www.wikidata.org/entity/Q708676',
Insitute: 'http://www.wikidata.org/entity/Q1664720'
};
exports.wikidataOutgoingClassMap = wikidataOutgoingClassMap;
var wikidataParameters = {
label: 'WikiData',
limit: 3000,
// Need a high one as very many items, and many languages
logo: _logic.kb.sym('https://www.wikimedia.org/static/images/project-logos/wikidatawiki.png'),
endpoint: 'https://query.wikidata.org/sparql',
searchByNameQuery: "SELECT ?subject ?name\n WHERE {\n ?klass wdt:P279* $(targetClass) .\n ?subject wdt:P31 ?klass .\n ?subject rdfs:label ?name.\n FILTER regex(?name, \"$(name)\", \"i\")\n } LIMIT $(limit) ",
// was SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en" }
insitituteDetailsQuery: "CONSTRUCT\n{ wd:Q49108 schema:name ?itemLabel;\n schema:logo ?logo;\n schema:logo ?sealImage;\n schema:subOrganization ?subsidiary .\n ?subsidiary schema:name ?subsidiaryLabel .\n}\nWHERE\n{\n wd:Q49108 # rdfs:label ?itemLabel ;\n wdt:P154 ?logo;\n wdt:P158 ?sealImage ;\n wdt:P355 ?subsidiary .\n # ?subsidiary rdfs:label ?subsidiaryLabel .\n\n SERVICE wikibase:label { bd:serviceParam wikibase:language \"[AUTO_LANGUAGE], fr\". }\n}"
};
exports.wikidataParameters = wikidataParameters;
var wikidataIncomingClassMap = {
'http://www.wikidata.org/entity/Q15936437': ns.schema('CollegeOrUniversity'),
// research university
'http://www.wikidata.org/entity/Q1664720': ns.schema('EducationalOrganization'),
// insitute @@
'http://www.wikidata.org/entity/Q43229': ns.schema('Organization'),
// research university
'http://www.wikidata.org/entity/Q3918': ns.schema('CollegeOrUniversity'),
// university
'http://www.wikidata.org/entity/Q170584': ns.schema('Project'),
// university
'http://www.wikidata.org/entity/Q327333': ns.schema('GovernmentOrganization'),
// govt agency
'http://www.wikidata.org/entity/Q2221906': ns.schema('Place'),
// geographic location
'http://www.wikidata.org/entity/Q167037': ns.schema('Corporation') // Corporation
};
exports.wikidataIncomingClassMap = wikidataIncomingClassMap;
var variableNameToPredicateMap = {
// allow other mappings to be added in theory hence var
// wikidata:
targetClass: ns.rdf('type'),
// logo: ns.schema('logo'),
sealImage: ns.schema('logo'),
// image: ns.schema('image'), defaults to shema
shortName: ns.foaf('nick'),
subsidiary: ns.schema('subOrganization'),
// dbpedia - :
city: ns.vcard('locality'),
state: ns.vcard('region'),
country: ns.vcard('country-name'),
homepage: ns.foaf('homepage'),
lat: ns.schema('latitude'),
"long": ns.schema('longitude')
};
exports.variableNameToPredicateMap = variableNameToPredicateMap;
function bindingToTerm(item) {
var typ = item.type.toLowerCase();
if (typ === 'uri' || typ === 'iri') {
return _logic.kb.sym(item.value);
} else if (typ === 'literal') {
if (item['xml:lang']) {
return new _rdflib.Literal(item.value, item['xml:lang']);
} else {
return new _rdflib.Literal(item.value);
}
} else {
throw new Error("bindingToTerm: Unexpected type \"".concat(item.type, "\" in sparql binding}"));
}
}
function loadFromBindings(kb, solidSubject, bindings, doc) {
var predMap = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : variableNameToPredicateMap;
var results = {};
debug.log("loadFromBindings: subject: ".concat(solidSubject));
debug.log(" doc: ".concat(doc));
bindings.forEach(function (binding) {
for (var key in binding) {
var result = binding[key];
var combined = JSON.stringify(result); // ( result.type, result.value )
results[key] = results[key] || new Set();
results[key].add(combined); // remove duplicates
}
});
var _loop = function _loop(key) {
var values = results[key];
debug.log(" results ".concat(key, " -> ").concat(values));
values.forEach(function (combined) {
var result = JSON.parse(combined);
var type = result.type,
value = result.value;
var obj;
if (type === 'uri') {
obj = kb.sym(value);
} else if (type === 'literal') {
obj = new _rdflib.Literal(value, result.language, result.datatype);
} else {
throw new Error("loadFromBindings: unexpected type: ".concat(type));
}
if (key === 'type') {
if (wikidataIncomingClassMap[value]) {
obj = wikidataIncomingClassMap[value];
} else {
debug.warn('Unmapped Wikidata Class: ' + value);
}
} else if (key === 'coordinates') {
// const latlong = value // Like 'Point(-71.106111111 42.375)'
debug.log(' @@@ hey a point: ' + value); // const regexp = /.*\(([-0-9\.-]*) ([-0-9\.-]*)\)/
var regexp = /.*\(([-0-9.-]*) ([-0-9.-]*)\)/;
var match = regexp.exec(value);
if (match) {
var _float = ns.xsd('float');
var latitude = new _rdflib.Literal(match[1], null, _float);
var longitude = new _rdflib.Literal(match[2], null, _float);
kb.add(solidSubject, ns.schema('longitude'), longitude, doc);
kb.add(solidSubject, ns.schema('latitude'), latitude, doc);
} else {
debug.log('Bad coordinates syntax: ' + value);
}
} else {
var pred = predMap[key] || ns.schema(key); // fallback to just using schema.org
kb.add(solidSubject, pred, obj, doc); // @@ deal with non-string and objects
debug.log(" public data ".concat(pred, " ").concat(obj, "."));
}
});
};
for (var key in results) {
_loop(key);
}
}
/* ESCO sopecific
*/
function ESCOResultToBindings(json) {
var results = json._embedded.results; // Array
var bindings = results.map(function (result) {
var name = result.title;
var uri = result.uri; // like http://data.europa.eu/esco/occupation/57af9090-55b4-4911-b2d0-86db01c00b02
return {
name: {
value: name,
type: 'literal'
},
subject: {
type: 'IRI',
value: uri
}
}; // simulate SPARQL bindings
});
return bindings;
}
/* Query all entities of given class and partially matching name
*/
function queryESCODataByName(_x, _x2, _x3) {
return _queryESCODataByName.apply(this, arguments);
}
/* Cope ithe syntax probelm in wikidata timeout responses
*
* Wikidata bug: https://phabricator.wikimedia.org/T283962
* This will not be needed whn that WDQS bug fixed.
* This is aptured in https://github.com/solid/solid-ui/issues/403
*/
function _queryESCODataByName() {
_queryESCODataByName = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(filter, theClass, queryTarget) {
var limit, queryURI, response, text, json;
return _regenerator["default"].wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
if (queryTarget.searchByNameURI) {
_context.next = 2;
break;
}
throw new Error('Missing queryTarget.searchByNameURI on queryESCODataByName');
case 2:
limit = queryTarget.limit || AUTOCOMPLETE_LIMIT;
queryURI = queryTarget.searchByNameURI.replace('$(name)', filter).replace('$(limit)', '' + limit).replace('$(targetClass)', theClass.toNT());
debug.log('Querying ESCO data - uri: ' + queryURI);
_context.next = 7;
return _logic.kb.fetcher.webOperation('GET', queryURI, fetcherOptionsJsonPublicData);
case 7:
response = _context.sent;
text = response.responseText || '';
debug.log(' Query result text' + text.slice(0, 500) + '...');
if (!(text.length === 0)) {
_context.next = 12;
break;
}
throw new Error('Wot no text back from ESCO query ' + queryURI);
case 12:
json = JSON.parse(text); // console.log('Whole JSON return object', json)
debug.log(' ESCO Query result JSON' + JSON.stringify(json, null, 4).slice(0, 500) + '...');
return _context.abrupt("return", ESCOResultToBindings(json));
case 15:
case "end":
return _context.stop();
}
}
}, _callee);
}));
return _queryESCODataByName.apply(this, arguments);
}
function fixWikidataJSON(str) {
var syntaxProblem = str.indexOf('SPARQL-QUERY');
if (syntaxProblem < 0) return str; // console.log('@@ fixWikidataJSON FIXING')
debug.warn(' ### Fixing JSON with wikidata error code injection ' + str.slice(syntaxProblem, syntaxProblem + 200));
var goodness = str.lastIndexOf('}, {');
return str.slice(0, goodness) + ' } ] } } '; // Close binding, array, bindings, results, root object
}
/* Query all entities of given class and partially matching name
*/
function queryPublicDataByName(_x4, _x5, _x6, _x7) {
return _queryPublicDataByName.apply(this, arguments);
}
/* Query a database using SPARQL SELECT
*/
function _queryPublicDataByName() {
_queryPublicDataByName = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(filter, theClass, languages, queryTarget) {
var substituteStrings, languagePrefs, language, sparql, queryURI, response, text, text2, json, bindings;
return _regenerator["default"].wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
substituteStrings = function _substituteStrings(template) {
var limit = queryTarget.limit || AUTOCOMPLETE_LIMIT;
var u1 = template.replace('$(name)', filter).replace('$(limit)', '' + limit).replace('$(language)', language);
return u1.replace('$(targetClass)', theClass.toNT());
};
if (theClass) {
_context2.next = 3;
break;
}
throw new Error('queryPublicDataByName: No class provided');
case 3:
_context2.next = 5;
return (0, _language.getPreferredLanguages)();
case 5:
_context2.t0 = _context2.sent;
if (_context2.t0) {
_context2.next = 8;
break;
}
_context2.t0 = _language.defaultPreferedLangages;
case 8:
languagePrefs = _context2.t0;
language = languagePrefs[0] || 'en';
if (!queryTarget.searchByNameQuery) {
_context2.next = 16;
break;
}
sparql = substituteStrings(queryTarget.searchByNameQuery);
debug.log('Querying public data - sparql: ' + sparql);
return _context2.abrupt("return", queryPublicDataSelect(sparql, queryTarget));
case 16:
if (!queryTarget.searchByNameURI) {
_context2.next = 46;
break;
}
// not sparql - random API
queryURI = substituteStrings(queryTarget.searchByNameURI);
_context2.prev = 18;
_context2.next = 21;
return _logic.kb.fetcher.webOperation('GET', queryURI, fetcherOptionsJsonPublicData);
case 21:
response = _context2.sent;
_context2.next = 27;
break;
case 24:
_context2.prev = 24;
_context2.t1 = _context2["catch"](18);
throw new Error("Exception when trying to fetch ".concat(queryURI, " \n ").concat(_context2.t1));
case 27:
text = response.responseText || ''; // ts
if (!(response.status !== 200)) {
_context2.next = 30;
break;
}
throw new Error("HTTP error status ".concat(response.status, " trying to fetch ").concat(queryURI, " "));
case 30:
debug.log(' Query result text' + text.slice(0, 500) + '...');
if (!(text.length === 0)) {
_context2.next = 33;
break;
}
throw new Error('queryPublicDataByName: No text back from public data query ' + queryURI);
case 33:
text2 = fixWikidataJSON(text); // Kludge: strip of interrupting error message
json = JSON.parse(text2);
debug.log(' API Query result JSON' + JSON.stringify(json, null, 4).slice(0, 500) + '...');
if (!json._embedded) {
_context2.next = 42;
break;
}
debug.log(' Looks like ESCO');
bindings = ESCOResultToBindings(json);
return _context2.abrupt("return", bindings);
case 42:
alert('Code me: unrecognized API return format');
throw new Error("*** Need to add code to parse unrecognized API JSON return\n".concat(JSON.stringify(json, null, 4)));
case 44:
_context2.next = 47;
break;
case 46:
throw new Error('Query source must have either rest API or SPARQL endpoint.');
case 47:
case "end":
return _context2.stop();
}
}
}, _callee2, null, [[18, 24]]);
}));
return _queryPublicDataByName.apply(this, arguments);
}
function queryPublicDataSelect(_x8, _x9) {
return _queryPublicDataSelect.apply(this, arguments);
}
/* Load from a database using SPARQL CONSTRUCT
*/
function _queryPublicDataSelect() {
_queryPublicDataSelect = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(sparql, queryTarget) {
var myUrlWithParams, queryURI, headers, options, response, text, text2, json, bindings;
return _regenerator["default"].wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
if (queryTarget.endpoint) {
_context3.next = 2;
break;
}
throw new Error('Missing queryTarget.endpoint required for queryPublicDataSelect');
case 2:
myUrlWithParams = new URL(queryTarget.endpoint);
myUrlWithParams.searchParams.append('query', sparql);
queryURI = myUrlWithParams.href;
debug.log(' queryPublicDataSelect uri: ' + queryURI);
headers = new Headers();
headers.append('Accept', 'application/json');
options = {
credentials: 'omit',
// CORS - as we know it is public
headers: headers
};
_context3.next = 11;
return _logic.kb.fetcher.webOperation('GET', queryURI, options);
case 11:
response = _context3.sent;
text = response.responseText || '';
if (!(text.length === 0)) {
_context3.next = 15;
break;
}
throw new Error('No text back from query ' + queryURI);
case 15:
text2 = fixWikidataJSON(text);
json = JSON.parse(text2);
debug.log(' Query result JSON' + JSON.stringify(json, null, 4).slice(0, 100) + '...');
bindings = json.results.bindings;
return _context3.abrupt("return", bindings);
case 20:
case "end":
return _context3.stop();
}
}
}, _callee3);
}));
return _queryPublicDataSelect.apply(this, arguments);
}
function queryPublicDataConstruct(_x10, _x11, _x12) {
return _queryPublicDataConstruct.apply(this, arguments);
}
function _queryPublicDataConstruct() {
_queryPublicDataConstruct = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4(sparql, pubicId, queryTarget) {
var myUrlWithParams, queryURI, headers, options, response, text, report;
return _regenerator["default"].wrap(function _callee4$(_context4) {
while (1) {
switch (_context4.prev = _context4.next) {
case 0:
debug.log('queryPublicDataConstruct: sparql:', sparql);
if (queryTarget.endpoint) {
_context4.next = 3;
break;
}
throw new Error('Missing queryTarget.endpoint required for queryPublicDataConstruct');
case 3:
myUrlWithParams = new URL(queryTarget.endpoint);
myUrlWithParams.searchParams.append('query', sparql);
queryURI = myUrlWithParams.href;
debug.log(' queryPublicDataConstruct uri: ' + queryURI);
headers = new Headers();
headers.append('Accept', 'text/turtle');
options = {
credentials: 'omit',
// CORS // @tsc pain
headers: headers // ({ Accept: 'text/turtle' } as Headers)
};
_context4.next = 12;
return _logic.kb.fetcher.webOperation('GET', queryURI, options);
case 12:
response = _context4.sent;
text = response.responseText || 'No response text?';
report = text.length > 500 ? text.slice(0, 200) + ' ... ' + text.slice(-200) : text;
debug.log(' queryPublicDataConstruct result text:' + report);
if (!(text.length === 0)) {
_context4.next = 18;
break;
}
throw new Error('queryPublicDataConstruct: No text back from construct query:' + queryURI);
case 18:
(0, _rdflib.parse)(text, _logic.kb, pubicId.uri, 'text/turtle');
case 19:
case "end":
return _context4.stop();
}
}
}, _callee4);
}));
return _queryPublicDataConstruct.apply(this, arguments);
}
function loadPublicDataThing(_x13, _x14, _x15) {
return _loadPublicDataThing.apply(this, arguments);
}
function _loadPublicDataThing() {
_loadPublicDataThing = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5(kb, subject, publicDataID) {
var iDToFetch, headers;
return _regenerator["default"].wrap(function _callee5$(_context5) {
while (1) {
switch (_context5.prev = _context5.next) {
case 0:
if (!publicDataID.uri.startsWith('https://dbpedia.org/resource/')) {
_context5.next = 4;
break;
}
return _context5.abrupt("return", getDbpediaDetails(kb, subject, publicDataID));
case 4:
if (!publicDataID.uri.match(/^https?:\/\/www\.wikidata\.org\/entity\/.*/)) {
_context5.next = 9;
break;
}
_context5.next = 7;
return getWikidataDetails(kb, subject, publicDataID);
case 7:
_context5.next = 13;
break;
case 9:
iDToFetch = publicDataID.uri.startsWith('http:') ? kb.sym('https:' + publicDataID.uri.slice(5)) : publicDataID;
headers = new Headers();
headers.append('Accept', 'text/turtle');
return _context5.abrupt("return", kb.fetcher.load(iDToFetch, {
credentials: 'omit',
headers: headers
}));
case 13:
case "end":
return _context5.stop();
}
}
}, _callee5);
}));
return _loadPublicDataThing.apply(this, arguments);
}
function getWikidataDetails(_x16, _x17, _x18) {
return _getWikidataDetails.apply(this, arguments);
}
function _getWikidataDetails() {
_getWikidataDetails = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6(kb, solidSubject, publicDataID) {
var subjRegexp, sparql;
return _regenerator["default"].wrap(function _callee6$(_context6) {
while (1) {
switch (_context6.prev = _context6.next) {
case 0:
subjRegexp = /wd:Q49108/g;
sparql = instituteDetailsWikidataQuery.replace(subjRegexp, publicDataID.toNT());
_context6.next = 4;
return queryPublicDataConstruct(sparql, publicDataID, wikidataParameters);
case 4:
debug.log('getWikidataDetails: loaded.', publicDataID);
case 5:
case "end":
return _context6.stop();
}
}
}, _callee6);
}));
return _getWikidataDetails.apply(this, arguments);
}
function getWikidataDetailsOld(_x19, _x20, _x21) {
return _getWikidataDetailsOld.apply(this, arguments);
}
function _getWikidataDetailsOld() {
_getWikidataDetailsOld = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee7(kb, solidSubject, publicDataID) {
var sparql, bindings;
return _regenerator["default"].wrap(function _callee7$(_context7) {
while (1) {
switch (_context7.prev = _context7.next) {
case 0:
sparql = "select distinct * where {\n optional { $(subject) wdt:P31 ?targetClass } # instance of\n optional { $(subject) wdt:P154 ?logo }\n optional { $(subject) wdt:P158 ?sealImage }\n# optional { $(subject) wdt:P159 ?headquartersLocation }\n\noptional { $(subject) wdt:P17 ?country }\noptional { $(subject) wdt:P18 ?image }\noptional { $(subject) wdt:P1813 ?shortName }\n\noptional { $(subject) wdt:P355 ?subsidiary }\n# SERVICE wikibase:label { bd:serviceParam wikibase:language \"fr,en,de,it\" }\n}".replace(subjectRegexp, publicDataID.toNT());
_context7.next = 3;
return queryPublicDataSelect(sparql, wikidataParameters);
case 3:
bindings = _context7.sent;
loadFromBindings(kb, publicDataID, bindings, publicDataID.doc()); // arg2 was solidSubject
case 5:
case "end":
return _context7.stop();
}
}
}, _callee7);
}));
return _getWikidataDetailsOld.apply(this, arguments);
}
function getWikidataLocation(_x22, _x23, _x24) {
return _getWikidataLocation.apply(this, arguments);
}
function _getWikidataLocation() {
_getWikidataLocation = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee8(kb, solidSubject, publicDataID) {
var sparql, bindings;
return _regenerator["default"].wrap(function _callee8$(_context8) {
while (1) {
switch (_context8.prev = _context8.next) {
case 0:
sparql = "select distinct * where {\n\n $(subject) wdt:P276 ?location .\n\n optional { ?location wdt:P2044 ?elevation }\n optional { ?location wdt:P131 ?region }\n optional { ?location wdt:P625 ?coordinates }\noptional { ?location wdt:P17 ?country }\n\n# SERVICE wikibase:label { bd:serviceParam wikibase:language \"fr,en,de,it\" }\n}".replace(subjectRegexp, publicDataID.toNT());
debug.log(' location query sparql:' + sparql);
_context8.next = 4;
return queryPublicDataSelect(sparql, wikidataParameters);
case 4:
bindings = _context8.sent;
debug.log(' location query bindings:', bindings);
loadFromBindings(kb, publicDataID, bindings, publicDataID.doc()); // was solidSubject
case 7:
case "end":
return _context8.stop();
}
}
}, _callee8);
}));
return _getWikidataLocation.apply(this, arguments);
}
function getDbpediaDetails(_x25, _x26, _x27) {
return _getDbpediaDetails.apply(this, arguments);
}
function _getDbpediaDetails() {
_getDbpediaDetails = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee9(kb, solidSubject, publicDataID) {
var sparql, bindings;
return _regenerator["default"].wrap(function _callee9$(_context9) {
while (1) {
switch (_context9.prev = _context9.next) {
case 0:
// Note below the string form of the named node with <> works in SPARQL
sparql = "select distinct ?city, ?state, ?country, ?homepage, ?logo, ?lat, ?long, WHERE {\n OPTIONAL { <".concat(publicDataID, "> <http://dbpedia.org/ontology/city> ?city }\n OPTIONAL { ").concat(publicDataID, " <http://dbpedia.org/ontology/state> ?state }\n OPTIONAL { ").concat(publicDataID, " <http://dbpedia.org/ontology/country> ?country }\n OPTIONAL { ").concat(publicDataID, " foaf:homepage ?homepage }\n OPTIONAL { ").concat(publicDataID, " foaf:lat ?lat; foaf:long ?long }\n OPTIONAL { ").concat(publicDataID, " <http://dbpedia.org/ontology/country> ?country }\n }");
_context9.next = 3;
return queryPublicDataSelect(sparql, dbpediaParameters);
case 3:
bindings = _context9.sent;
loadFromBindings(kb, publicDataID, bindings, publicDataID.doc());
debug.log('Finished getDbpediaDetails.');
case 6:
case "end":
return _context9.stop();
}
}
}, _callee9);
}));
return _getDbpediaDetails.apply(this, arguments);
}
//# sourceMappingURL=publicData.js.map