Как составить список и подсчитать различные типы узловых и граничных объектов в данных графика, используя запрос SPARQL?

Я хочу предоставить некоторые сводные статистические данные для набора данных, и я хочу перечислить различные типы краевых объектов и узлов (вершин) на графике.

Например:

-> В графе Twitter социальной сети пользователей и последующих отношений (однородный граф) существует только один тип вершинного объекта (пользователя), но в гетерогенных графах, таких как данные ConceptNet, он будет иметь несколько значений.

-> Объекты ребер можно вычислить, просто посчитав различное количество предикатов, которые я считаю, используя запрос:

SELECT DISTINCT (?p AS ?DistinctEdges)  { ?s ?p ?o }

Но я не уверен, как это сделать для вершин. Тип вершины может быть из предметного или объектного поля тройки, а объект в свою очередь может быть либо значением (литералом), либо самим другим ресурсом.

Пожалуйста, извините, если я где-то ошибся с лексикой. Я только начал работать над созданием семантического веб-приложения.

1 ответ

Решение

Вы можете использовать UNION предложение объединить две модели в сочетании с FILTER пункт с использованием IsLiteral() функция для пропуска литералов, например

SELECT DISTINCT ?vertex
WHERE
{
  { 
    ?vertex ?p [] 
  }
  UNION
  { 
    [] ?p ?vertex 
    FILTER(!IsLiteral(?vertex))
  }
}

[] является анонимной переменной, потому что вы не заботитесь о некоторых позициях по обе стороны от UNION поэтому, присваивая им анонимную переменную, мы сопоставляем любое значение, но не переносим эти значения в запрос.

FILTER Предложение в RHS объединения используется для фильтрации объектов, которые являются литералами. Нет необходимости иметь это в LHS, потому что RDF запрещает буквальные предметы, поэтому любой ?vertex значение из LHS должно быть ресурсом, т.е. URI/ пустым узлом

Другие вопросы по тегам