如何application/ld+json script在AngularJS中使用动态构建的JSON对象创建标记.
这就是我需要脚本标签的样子
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "Place",
"geo": {
"@type": "GeoCoordinates",
"latitude": "40.75",
"longitude": "73.98"
},
"name": "Empire State Building"
}
</script>
Run Code Online (Sandbox Code Playgroud)
我尝试了以下代码,但我无法让它工作:
HTML
<div ng-controller="TestController">
<script type="application/ld+json">
{{jsonId|json}}
</script>
{{jsonId|json}}
</div>
Run Code Online (Sandbox Code Playgroud)
调节器
var myApp = angular.module('application', []);
myApp.controller('TestController', ['$scope', function($scope) {
$scope.jsonId = {
"@context": "http://schema.org",
"@type": "Place",
"geo": {
"@type": "GeoCoordinates",
"latitude": "40.75",
"longitude": "73.98"
},
"name": "Empire State Building"
};
}]);
Run Code Online (Sandbox Code Playgroud)
脚本标记内的表达式不会执行.脚本标记外部的表达式正确执行并显示JSON
请看jsfiddle
是否可以外化json-ld并将其包含在如下的html文档中:
<script type="text/javascript" src="http://www.example.com/data123.jsonld"></script>
Run Code Online (Sandbox Code Playgroud)
似乎没有关于这个在线的任何文件....
当我从Google文档(下面的代码片段)中复制/粘贴JSON-LD示例时,我在结构化数据测试工具中收到错误:
http://www.your-company-site.com(提供的所有值http://www.example.com/必须具有相同的域.)
为什么Google自己的文档示例会出错?
Google文档中的代码段:
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "Organization",
"url": "http://www.your-company-site.com",
"contactPoint": [{
"@type": "ContactPoint",
"telephone": "+1-401-555-1212",
"contactType": "customer service"
}]
}
</script>
Run Code Online (Sandbox Code Playgroud) 我需要将这个40MB的RDF/XML文件转换为JSON-LD格式,我只找到了这个根本不起作用的网络工具.当您粘贴40MB的文本时,它会崩溃,当您为其提供文件的URL时,它会说该服务不可用.
从理论上讲耶拿API,也许芝麻应该是能够做到这一点,但我缺少一个起点,对这些系统的知识.有人可以给我一个路线,一个示例或链接到有用的文档,以便将大型RDF/XML转换为JSON-LD吗?
(我对Java,C#或一个工作解决方案感到满意,我不需要在另一种语言/框架中有太多的编程知识).
我想使用jsonld.js库的expand和compact方法将来自各种源的数据转换为通用格式进行处理.如果我获取源JSON文档,添加一个,然后通过该方法传递它我能够获得我需要的通用格式.@contextexpand
我无法找到解决方案的用例是需要合并多个值时.例如,schema.org定义了PostalAddress一个单独的字段streetAddress,但许多系统将街道地址存储为单独的值(街道号,街道名称,街道方向......).要将传入的数据转换为schema.org格式,我需要一种方法来指示我的@context多个字段以streetAddress正确的顺序组成.
压缩文件
{
"@context": {
"displaName": "http://schema.org/name",
"website": "http://schema.org/homepage",
"icon": "http://schema.org/image",
"streetNumber": "http://schema.org/streetAddress"
},
"displaName": "John Doe",
"website": "http://example.com/",
"icon": "http://example.com/images/test.png",
"streetNumber": "123",
"streetName": "Main St",
"streetDirection": "South"
}
Run Code Online (Sandbox Code Playgroud)
扩展文件
{
"http://schema.org/name":[
{
"@value":"John Doe"
}
],
"http://schema.org/image":[
{
"@value":"http://example.com/images/test.png"
}
],
"http://schema.org/streetAddress":[
{
"@value":"123"
}
],
"http://schema.org/homepage":[
{
"@value":"http://example.com/"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我已经回顾了我能找到的所有JSON-LD规范,并且无法找到任何指示使用分割或连接值的方法@context.
是否有人知道一种方法,以正确的顺序将多个值映射到一个上下文属性,并可能在值之间添加空格.我还需要找到一个反向场景的解决方案,我需要按正确的顺序将一个字段拆分成多个值.
注意:即使我将所有三个属性都映射到streetAddress,数值都将包含在数组中,但不能保证它们的顺序正确.
我正在为Parcel Deliveries测试Gmail的电子邮件标记功能,但似乎我无法做到这一点.这是向我发送电子邮件后的电子邮件内容:
Return-Path: <test.email@gmail.com>
Received: from my-pc.local ([my.ip.add.ress])
by mx.google.com with ESMTPSA id 68sm3737559qgz.8.2015.01.29.06.06.37
for <test.email@gmail.com>
(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
Thu, 29 Jan 2015 06:06:38 -0800 (PST)
Date: Thu, 29 Jan 2015 11:06:33 -0300
From: "Test Name" <test.email@gmail.com>
To: test.email@gmail.com
Subject: Your package is on its way
Message-ID: <20150129140633.GA18059@my-pc.local>
MIME-Version: 1.0
Content-Type: text/html; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.5.23 (2014-03-12)
<html>
<body>
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "ParcelDelivery",
"deliveryAddress": {
"@type": "PostalAddress",
"streetAddress": "Test Address", …Run Code Online (Sandbox Code Playgroud) 我可以在同一页面中使用多个JSON-LD组(使用Schema.org)吗?
如果我不能,如何将它们组合在一起?我对语法不太熟悉.
第1组:
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "LocalBusiness",
"address": {
"@type": "PostalAddress",
"streetAddress": "3102 Highway 98",
"addressRegion": "FL",
"addressLocality": "Mexico Beach",
"postalCode": "45252",
"addressCountry": "US",
},
"geo": {
"@type": "GeoCoordinates",
"latitude": "40.75",
"longitude": "73.98"
},
"name": "Beachwalk Beachwear & Giftware",
"telephone": "850-648-4200",
"email": "admin@example.com",
"faxNumber": "860-562-4250",
}
</script>
Run Code Online (Sandbox Code Playgroud)
第2组:
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "Organization",
"url": "http://example.com",
"name": "My Domain Title",
"logo": "http://example.com/wp-content/uploads/2015/08/abc.jpg",
"contactPoint": [
{
"@type": "ContactPoint",
"telephone": "0192-39192130",
"contactType": "customer service"
},
{
"@type": "ContactPoint", …Run Code Online (Sandbox Code Playgroud) 使用此简单代码创建一个 HTML 文件并在 Safari 中打开它。
<html>
<head>
<script type="application/ld+json">
[
{
"@context": "http://schema.org",
"@type": "Organization",
"name": "Parqet",
"url": "https://www.parqet.com/",
"logo": "https://www.parqet.com/logos/parqet_logo_pos.svg",
"sameAs": [
"https://www.facebook.com/parqetcom",
"https://twitter.com/ParqetApp",
"https://www.instagram.com/ParqetApp/",
"https://www.youtube.com/channel/UC4LOcElG8Z73Hvgbbp3m1KQ",
"https://www.linkedin.com/company/parqet/",
"https://github.com/tresorone"
]
}
]
</script>
</head>
<body>
test
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
Safari 会产生此错误。
类型错误:未定义不是对象(评估 'r["@context"].toLowerCase')
非常感谢任何有关我们如何解决此问题的见解。在最后一个属性或对象中添加尾随逗号可以消除错误 - 但它不再是有效的 JSON。
我在JSON LD格式中添加了schema.org标签<script>,当我使用Google结构化数据测试工具测试我的页面时,我可以看到我的所有标签.
但是,当我安装Facebook像素助手chrome扩展程序来测试我的页面时,schema.org标签显示为空白.不确定为什么Facebook像素助手无法检测到它.
非常感谢任何帮助.
@vocabJSON-LD中的属性是什么?在我看来,你可以"导入"一个远程词汇表,但这与你能做的不一样@context吗?如果我没错,那么你也可以"导入"远程源@context.那么@vocab和之间的区别在@context哪里?
额外的问题:我可以有一个以上@vocab吗?例如,第一个引用到schema.org,另一个引用到rdfs?
json-ld ×10
json ×4
schema.org ×4
html ×2
javascript ×2
rdf ×2
angularjs ×1
email ×1
gmail ×1
html5 ×1
linked-data ×1
microdata ×1
safari ×1
url ×1