Как составить список и подсчитать различные типы узловых и граничных объектов в данных графика, используя запрос 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/ пустым узлом