Как описать возможности устройства с графом RDF с использованием сериализации JSON-LD? - PullRequest
2 голосов
/ 04 мая 2019

Мне нужно описать возможности устройств и как семантически вызывать функции возможностей. Для этого я создал очень простой RDF Graph и использовал библиотеку @ rdfjs / serializer-jsonld для сериализации графика в файл JSON-LD со следующим кодом:

const rdf = require('@rdfjs/data-model')
const Readable = require('stream').Readable
const SerializerJsonld = require('@rdfjs/serializer-jsonld')

const serializerJsonld = new SerializerJsonld()
const input = new Readable({
  objectMode: true,
  read: () => {
    input.push(rdf.quad(
      rdf.literal('Device001'),
      rdf.namedNode('https://schema.org/potentialAction'),
      rdf.namedNode('https://schema.org/PhotographAction')))
    input.push(rdf.quad(
      rdf.namedNode('https://schema.org/PhotographAction'),
      rdf.namedNode('https://w3id.org/function/ontology#Function'),
      rdf.literal('takePhoto')))
    input.push(null)
  }
})
const output = serializerJsonld.import(input)

output.on('data', jsonld => {
  console.log(jsonld)
})

, который создает следующий файл JSON-LD.

[
    {
        "@id": "Device001",
        "https://schema.org/potentialAction": {
            "@id": "https://schema.org/PhotographAction"
        }
    },
    {
        "@id": "https://schema.org/PhotographAction",
        "https://w3id.org/function/ontology#Function": "takePhoto"
    }
]

Это семантически правильно? Можно ли комбинировать онтологию [schema.org] (https://schema.org/) и онтологию функции без использования RDF-схемы или какого-либо класса или типа? Есть ли лучший способ объединить 2 онтологии? JSON-LD Детская площадка не дает ошибок, но есть ли лучший способ проверить?

1 Ответ

1 голос
/ 05 мая 2019
{
    "@id": "Device001",
    "https://schema.org/potentialAction": {
        "@id": "https://schema.org/PhotographAction"
    }
}

Здесь вы создаете экземпляр без класса, идентифицируемый URI https://schema.org/PhotographAction, но вы, вероятно, хотите создать экземпляр, имеющий класс https://schema.org/PhotographActionи это идентифицируется URI под вашим контролем.

{
    "@id": "Device001",
    "https://schema.org/potentialAction": {
        "@type": "https://schema.org/PhotographAction"
        "@id": "Action001"
    }
}

{
    "@id": "https://schema.org/PhotographAction",
    "https://w3id.org/function/ontology#Function": "takePhoto"
}

Здесь вы говорите что-то о классе https://schema.org/PhotographAction, но вы, вероятно, хотитескажи что-нибудь о своем экземпляре, который имеет этот класс (где экземпляр идентифицируется по URI, который вы указали в первом узле).

{
    "@id": "Action001",
    "https://w3id.org/function/ontology#Function": "takePhoto"
}

Я не знаком с онтологией функций, но как https://w3id.org/function/ontology#Function - это класс, вы, вероятно, не хотите использовать его в качестве свойства.

...