gpt4 book ai didi

javascript - 为使用 dbpedia 的 sparql 查询生成 url

转载 作者:行者123 更新时间:2023-12-01 01:45:42 24 4
gpt4 key购买 nike

我正在开发一个服务前端,目前用户可以提出自己的 SPARQL 查询并在其中设置参数,例如:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX dbpedia: <http://dbpedia.org/resource/>
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX framenet: <http://www.newsreader-project.eu/framenet/>
PREFIX gaf: <http://groundedannotationframework.org/files/2014/01/>
PREFIX dct: <http://purl.org/dc/terms/>
PREFIX sem: <http://semanticweb.cs.vu.nl/2009/11/sem/>
# All allowed parameters:
# output: html, offset: 0, limit: 100,
# uri.0: {uri_0}, uri.1: {uri_1}
# filter_block: ?filterfield bif:contains "{string}" ., date_filter_block: ?d owltime:year "{datefilter}"^^xsd:int .
# uri_filter_block: ?filterfield rdfs:label ?_label . ?_label bif:contains "{string}" .

SELECT ?event (COUNT(*) AS ?event_size) ?datetime ?event_label
WHERE {
{
SELECT DISTINCT ?event ?datetime ?event_label
WHERE {
{ ?event sem:hasActor {uri_0} } UNION { ?event sem:hasPlace {uri_0} }
?event sem:hasTime ?t ; rdfs:label ?event_label .
?t owltime:inDateTime ?d .
?d owltime:year "{datefilter}"^^xsd:int .
?t rdfs:label ?datetimetmp .
FILTER (regex(?datetimetmp,"\\d{4}-\\d{2}"))
BIND (SUBSTR(?datetimetmp,1,10) AS ?datetime)
}
ORDER BY ?datetime
OFFSET 0
LIMIT 100
}
?event ?p ?o .
}
GROUP BY ?event ?datetime ?event_label
ORDER BY ?datetime

以及类似 this 的页面生成的结果将查询结果显示为表格。

我想做的是创建一个页面,用户可以使用该页面以“更简单”的方式输入所需的参数。因此,不要输入 limit:100在 SPARQL 查询中,我为他们提供了一个名为“Limit”的文本框,然后他们在其中输入一个值。我还有一个下拉列表,其中列出了所有不同的查询类型(例如我在此处向您展示的“获取提及指定 Actor 的事件”,或者其他诸如“获取类型的属性”或“获取带有以下内容的事件”)特定的框架净值')。

我有一个 index.html 文件和一个 code.js 文件,到目前为止,我只是有一个带有文本框和一个提交按钮的页面,当单击/按下 Enter 时,会运行一个函数它使用 ajax 请求从我生成的 url 中“拉”表,例如我上面链接到的结果页面。该 url 通过以下方式生成:

var runQuery = function move(actor, pageNum) {
var initUrl = "https://newsreader.scraperwiki.com/{0}/page/{1}?uris.0={2}"
var queryUrl = initUrl.replace("{1}", pageNum);
var queryUrl = queryUrl.replace("{2}", "dbpedia:" + actor);
limit = $(textInput[1]).val();
offset = $(textInput[2]).val();
stringFilter = $(textInput[3]).val();
dateFilter = $(textInput[4]).val();
framenet = $(textInput[5]).val();
if (limit != "") {queryUrl += ("&limit=" + limit)};
if (offset != "") {queryUrl += ("&offset=" + offset)};
if (stringFilter != "") {queryUrl += ("&filter=" + stringFilter)};
if (dateFilter != "") {queryUrl += ("&datefilter=" + dateFilter)};
//...more code follows...

完整代码可见here .

对于我到目前为止所做的一切来说,一切都很好,但是我在尝试想办法简洁地改变 var queryUrl = queryUrl.replace("{2}", "dbpedia:" + actor; 时遇到了麻烦。特别是行和代码的其余部分,以说明用于不同查询类型的不同前缀(在上面的 SPARQL 查询中,它是 PREFIX dbpedia: <http... ,但有时是 PREFIX dbo: <http... 等)。

在冗长的解释之后,我想知道是否有手动操作 queryUrl 的替代方法并使用大量条件语句来解释所有不同的查询类型,如果是这样,我该怎么做?我对任何类型的网络东西都很陌生,我有点迷失了!任何关于如何尽可能简洁地处理不同查询类型的建议都会很棒。我现在能想到如何做到这一点的唯一方法就是编写某种代码来说明...

if (actor != "") {
queryUrl = queryUrl.replace("{2}", "dbpedia:" + actor);
} else if (....) {
queryUrl = queryUrl.replace("{2}", "dbo:" + ....);
} else... etc

..(其中 actor 指的是事物的名称),但我认为这样做会很笨拙,并且会与需要考虑的所有不同格式混淆。

提前致谢,如果需要有关我的问题的更多信息,请随时告诉我!

编辑:我得出的结论是,dbpedia-spotlight 对于我在这个问题中强调的问题不是很有用。

最佳答案

我决定访问the API page output as JSON这样我就可以从那里访问查询,而不是考虑每种类型的 queryUrl。任何额外的想法和答案将不胜感激,但现在是不必要的。

谢谢!

关于javascript - 为使用 dbpedia 的 sparql 查询生成 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24912967/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com