【发布时间】:2015-08-25 11:37:12
【问题描述】:
对于 Angular 的新手,如果是一个愚蠢的问题,我们深表歉意。已经检查了有关数据多样性、堆栈溢出、谷歌的其他问题...... 检查了 w3c 并尝试了几次“尝试一下,看看解决方案”,但就是无法让它发挥作用。
基本上,我使用 Angular 将 SPARQL 查询的结果绑定到数据集/查询中的类和类数 使用 Fuseki Server 1-1.1.2 端点 (SPARQL 1.1)。 (问题后见下面的代码)。
这很好地列出了 URI 格式的类名和 URI 格式的实例计数,但我只想在结果中看到“类”的“#”之后的字符,而不是整个 URI。
我最初尝试在 SPARQL 查询中使用查询中的 REPLACE 和 STRAFTER 函数(即 SELECT (strafter(str(?class),"#") AS ?className))在 Fuseki 中直接运行良好但返回空白导致尝试的角度绑定。
通过阅读其他答案,我知道 getLocalName() 并且并非所有数据在“#”之后都有本地名称,但我需要访问 JavaScript 中“#”之后的部分。所以我的问题是这个....
为了对返回的数据执行 URI/字符串操作,我想知道如何将返回的单个数据项绑定到单个范围变量,即而不是 $scope.results = response.results.bindings 我可以做类似 $scope.results.class= response.results.bindings.class.value 的事情吗? (当我尝试它时它不起作用,也没有将“results.bindings.class.value”传递给字符串描述函数,因为我不知道如何在 ng-repeat 中调用它)。
所以请总结一下,您能告诉我如何将单个 json“值”绑定到命名的 $scope 变量吗?
感谢您的任何帮助。我必须使用 SPARQL、javascript/HTML/angular 来完成。
这是我的代码。
<!DOCTYPE html>
<html >
<script src= "http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
<body>
<div ng-app="myApp" ng-controller="queryCtrl"><table>
<tr ng-repeat="x in results">
<td>{{x.class.value}}</td>
<td>{{x.count.value}}</td>
</tr>
</table></div>
<script>
var app = angular.module('myApp', []);
app.controller('queryCtrl', function($scope, $http) {
var query = encodeURIComponent("SELECT ?class (COUNT(?s) AS ?count ) { ? s a ?class } GROUP BY ?class ORDER BY ?count");
var endpoint = "http://localhost:3030/dataset/query";
$scope.results = [];
$http.get("http://localhost:3030/dataset/query? query="+query+"&output=json")
.success(function (response) {
$scope.results = response.results.bindings;
/* for debugging*/
if ( window.console && window.console.log ) {
// console is available, write message if something has happened
console.log(response.results);
}
});
});
</script>
</body>
</html>
【问题讨论】:
标签: json angularjs string binding sparql