gpt4 book ai didi

json - 如何以 Angular 将单个 json 数据 "values"绑定(bind)到命名的 $scope 变量(使用 SPARQL 查询返回的数据)?

转载 作者:行者123 更新时间:2023-12-02 01:36:48 25 4
gpt4 key购买 nike

如果是一个愚蠢的问题,Newby 对 Angular 表示歉意。已经检查了关于数据多样性、堆栈溢出、谷歌的其他问题......
检查了 w3c 并尝试了几个“试试看解决方案”,但就是无法让它发挥作用。

基本上,我使用 angular 来绑定(bind) SPARQL 查询的结果对数据集/查询中的类和类的数量
使用 Fuseki Server 1-1.1.2 端点 (SPARQL 1.1)。 (见问题后的代码)。

这很好地列出了 URI 格式的类名和 URI 格式的实例计数,但我只想在结果中看到“类”的“#”之后的字符,而不是整个 URI。

我最初尝试在 SPARQL 查询中使用查询中的 REPLACE 和 STRAFTER 函数(即 SELECT (strafter(str(?class),"#") AS ?className)) 直接在 Fuseki 中正常工作,但在尝试时返回空白结果 Angular 绑定(bind)。

通过阅读其他答案,我知道 getLocalName() 并且并非所有数据在“#”之后都有本地名称,但我需要访问 JavaScript 中“#”之后的部分。所以我的问题是这个......

为了对返回的数据执行 URI/字符串操作,我想知道如何将返回的单个数据项绑定(bind)到单个范围变量,即而不是 $scope.results = response.results.bindings
我可以做类似 $scope.results.class = response.results.bindings.class.value 的事情吗?
(当我尝试它时它不起作用,也没有将“results.bindings.class.value”传递给字符串描述函数,因为我不知道如何在 ng-repeat 中调用它)。

所以请总而言之,您能告诉我如何将单个 json“值”绑定(bind)到命名的 $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>

最佳答案

如果我正确理解您的问题,您希望绑定(bind)到 json 数据,但仅在 # 之后显示子字符串在类值的 View 中。这可以通过在 x.class.value 上应用过滤器来完成。 .所以你会这样做:

假设您的数据以下列形式返回:

{"results": {"bindings": [
{"class": {"value": "http://foo.bar#foo"}, "count": {"value": 123}}
]
}}

检索一个 json 文件并使用返回值填充范围变量:
app.controller('queryCtrl', function($scope, $http) {
$scope.results = [];
$http.get("results.json")
.then(function (response) {
$scope.results = response.data.results.bindings;
});
});

在 View 中应用过滤器:
<td>{{x.class.value | myFilter}}</td>

定义过滤器以提取 # 之后的子字符串:
app.filter('myFilter', function() {
return function(name) {
var n = name.indexOf('#');// or lastIndexOf
return name.substring(n + 1);
}
});

这是一个有效的 plunker .

p.s.您可以将示例中的所有查询逻辑移动到可重用的服务/工厂,这将使您的应用程序更清洁。

关于json - 如何以 Angular 将单个 json 数据 "values"绑定(bind)到命名的 $scope 变量(使用 SPARQL 查询返回的数据)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30752593/

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