问题描述
对于去年的一个学校项目,我制作了一个 Web 应用程序,用户可以从多个类别中进行选择以获取推荐的电影。这是通过将用户输入参数化到预先编写的 SPARQL 查询中来完成的。但是,用户目前只能在输入所有类别的情况下才能找到电影。对于个人使用,我想更改此设置,以便用户只能选择例如“喜剧”,并获得所有喜剧,无论其发布时间或年代如何。
用户输入的参数化方式如下:
if (chosenDecade == "Choose decade here" || chosenGenre == "Choose genre here" || chosenLength == "Choose runtime here" || chosenCountry == "Choose country here"){
alert('Please provide all values!')
} else {
var mySparqlQuery = encodeURI('
PREFIX mo: <http://www.movieontology.org/2009/10/01/movieontology.owl#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-Syntax-ns#>
PREFIX fp: <http://example.com/FinalProject/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?title ?plot ?genre ?releaseYear ?runtime ?countryLabel ?Metascore ?imdbrating ?imdbID
WHERE { ?movie rdf:type mo:Movie ;
rdf:type fp:' + chosenDecade + 'Movie ;
rdf:type fp:' + chosenLength + 'Movie ;
fp:hasGenre ?genre ;
mo:hasTitle ?title ;
fp:hasPlot ?plot ;
mo:hasRuntime ?runtime ;
fp:hasReleaseYear ?releaseYear ;
mo:hasReleasingCountry ?country ;
fp:hasIMDbID ?imdbID ;
mo:hasIMDbrating ?imdbrating ;
fp:hasMetascore ?Metascore .
FILTER(CONTAINS(STR(?genre),"' + chosenGenre + '"))
FILTER(CONTAINS(STR(?country),"' + chosenCountry + '")) } ').replace(/#/g,'%23');
}
我想知道的是,是否有一种方法可以让用户不必提供所有值(例如只有一个值)而不必为每个特定情况编写逻辑(我猜这将是 16 个不同的案例),即例如
if (chosenDecade != "Choose decade here" && chosenGenre == "Choose genre here" && chosenLength == "Choose runtime here" && chosenCountry && "Choose country here")
紧接着是没有 selectedGenre、choedLength、 selectedCountry 变量的 SPARQL 查询(在用户只提供十年的情况下)。
我是这方面的业余爱好者,如果代码阅读起来很痛苦,我深表歉意。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)