我正在开展一个项目,要求我们使用现有的服务,这个服务会说json-ld.我们说json.我仍在通过http://www.w3.org/TR/json-ld/文档以及如何转换json> json-ld(和返回).
一些问题..如果我提供2个这样的上下文..
"@context": [
"http://example/test1/core.jsonld",
"http://example2/test2/core.jsonld"
],
Run Code Online (Sandbox Code Playgroud)
密钥如何知道要应用哪个前缀?例如
(test1 or test2)name : ..
(test1 or test2)date : ..
(test1 or test2)address : ..
Run Code Online (Sandbox Code Playgroud)
到目前为止,我对其工作原理的理解是,任何json都可以转换为json ld.我们需要为它提供一个上下文,因此它知道'iri'或命名空间.
另外,我正在使用的当前示例json-ld也有一些没有定义前缀的键,所以我想有一个默认值,但没有任何东西可以告诉我默认是什么(没有@vocab,字面上只是两个上下文定义).我想默认是一个上下文,但在这种情况下,我有2.
如果我错了,请纠正我,但所有json都可以转换为json-ld,反之亦然?我正在寻找Java解决方案ATM.
我想要的一个非常基本的例子
{
"id": 1,
"name": "A green door",
"price": 12.50,
}
Run Code Online (Sandbox Code Playgroud)
成为
{
@context{
test : www.example.com/test/core.json-ld
test2 : www.example.com/test2/core.json-ld
}
"id": 1,
"test:name": "A green door",
"test2:price": 12.50,
}
Run Code Online (Sandbox Code Playgroud)
编辑:所以这里是服务期望我的一个例子
{
"@context": [
"http://test.net/abcd/contexts/core.jsonld",
"http://test.net/abcd/contexts/def/4.0/core.jsonld"
],
"startDate": { "@value": "2009-11-21T22:17:10Z", "@type": "xsd:dateTime" },
"endDate": { "@value": "2005-13-24T22:01:01Z", "@type": "xsd:dateTime" },
"comment": "my comment",
"example": [{
"properties": {
"name": "test name",
"description": "test description",
"geometry": { "objVal": "POINT (127.25 3.243)", "confidence": "abcd-c:MED" },
"def:width": { "decimalVal" : 50, "units": "abcd-u:meters" },
"def:length": { "decimalVal" : 75, "units": "abcd-u:meters" },
"def:height": { "decimalVal" : 200, "units": "abcd-u:meters" },
"def:status": "operational",
"def:typeCode": "building"
},
"metadata": {
"@id": "object/123-32132-12321f",
"type": [ "def:Building" ],
"def:confidence": { "@id": "abcd-c:HIGH" },
"def:typeCode": "building"
}
}],
"def:classification": "classified",
"def:confidence": { "@id": "abcd-c:HIGH" },
"def:indicator": { "@value": "true", "@type": "xsd:boolean" },
"def:levelCode": { "@id": "def-cl:FULL" },
"source": {
"@id": "remote-store/12321fd-cdsf143221",
"mediaType": "image/jpeg",
"startDate": { "@value": "2001-11-11T12:02:02Z", "@type": "xsd:dateTime" },
"def:classification": "classified",
"def:producer": "ABC",
"name": "another name",
"describedby": "source/123123123-f21321f"
}
}
Run Code Online (Sandbox Code Playgroud)
我当前的json当然看起来不像这样,我可以将它构造得类似但我觉得如果我只需要将@context添加到我当前的json并将其传递给服务就太容易了,因为它显示我对它的期望.听起来我可能会做到这一点,并且拥有存在的服务读取带有注释的json与我提供的示例json-ld相同
首先,根据定义,每个JSON-LD文档也是有效的JSON文档.
密钥如何知道要应用哪个前缀?
按顺序评估上下文.这意味着test2/core.jsonld您示例中的术语定义将覆盖其中的定义test1/core.jsonld.在" 高级上下文使用 " 一节中的JSON-LD规范中对此进行了更详细的描述.
到目前为止,我对其工作原理的理解是,任何json都可以转换为json ld.我们需要为它提供一个上下文,因此它知道'iri'或命名空间.
对于大多数正确的文件.有一些形式无法通过添加上下文映射到合理的JSON-LD.
另外,我正在使用的当前示例json-ld也有一些没有定义前缀的键,所以我想有一个默认值,但没有任何东西可以告诉我默认是什么(没有@vocab,字面上只是两个上下文定义).我想默认是一个上下文,但在这种情况下,我有2.
弄清楚幕后发生的事情的最简单方法是使用JSON-LD游乐场并展开文档.这摆脱了上下文并显示了处理器如何解释数据.在展开文档时,忽略(即删除)未映射到IRI的术语.
编辑:
我当前的json当然看起来不像这样,我可以将它构造得类似但我觉得如果我只需要将@context添加到我当前的json并将其传递给服务就太容易了,因为它显示我对它的期望.
这确实是最简单的解决方案.
我仍然对如何从json到ld的实际转换感到困惑.
JSON-LD也只是JSON.所以没有魔法..最简单的事情,如果可以的话,就是将其带入其他服务所期望的形式.
我希望有一些类型的库,我只是提供我的json并给它一个上下文,它为我做转换?是这样的/可能吗?我的用例是....我从ui创建一个json对象,我将这个json发送到我的休息服务,它调用一个服务,在这个服务中我想将它转换为json ld,然后调用另一个只能理解ld的服务.
这也是可能的,但可能更复杂.您需要调用JSON-LD处理器的紧凑方法与expandContext设置为它映射上下文选项的键向右虹膜和设置上下文(一个或多个)其他服务要求的上下文参数.如果其他服务确实使用JSON-LD,则压缩它以使用相同的上下文不是必需的.只需通过传递expandContext来扩展它就足够了.
让我们说预先存在的服务为我提供了他们的背景,例如www.test.com,还有什么需要做/提供?
没什么我猜的