Nano Hash - криптовалюты, майнинг, программирование

Запрос нескольких наборов данных TDB

Использование: jena-fuseki-1.1.0, apache-jena-2.12.0

Чего я хочу достичь и мое текущее состояние:

Я пытаюсь настроить локальный сервер jena-fuseki с dbpedia Persondata (английский и немецкий), межъязыковыми ссылками, изображениями и ссылками на статью Википедии, загруженными с wiki.dbpedia.org/Downloads2014 в виде файлов .nt. Я хочу запустить на них приведенный ниже SPAQRL-запрос и получить тот же результат, что и на dbpedia.org/sparql. Этот запрос должен дать мне всех живых людей, родившихся в Штутгарте, Германия, с их именем, датой рождения, текстом описания на английском и немецком языках, ссылкой на википедию, ссылкой на изображение и кратким описанием.

PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
PREFIX : <http://dbpedia.org/resource/>
PREFIX dbpedia2: <http://dbpedia.org/property/>
PREFIX dbpedia: <http://dbpedia.org/>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX dbo: <http://dbpedia.org/ontology/>

SELECT ?name ?birth ?description_en ?description_de ?wiki ?description ?pic
WHERE {
   ?person dbo:birthPlace :Stuttgart .
   ?person dbo:birthDate ?birth .
   ?person foaf:name ?name .
   OPTIONAL{
      ?person dc:description ?description .
      FILTER (LANG(?description) = 'en') .
   }
   OPTIONAL{
      ?person foaf:isPrimaryTopicOf ?wiki .
   }
   FILTER NOT EXISTS{
      ?person dbo:deathDate ?death .
   }
   OPTIONAL {
      ?person rdfs:comment ?description_en .
      FILTER (LANG(?description_en) = 'en') .
   }
   OPTIONAL {
      ?person rdfs:comment ?description_de .
      FILTER (LANG(?description_de) = 'de') .
   }
   OPTIONAL {
      ?person dbo:thumbnail ?pic
   }
}
ORDER BY ?name

что я получаю на dbpedia.org/sparql:

Первый ряд:

"Abdulsamed Akin"@en 1991-07-17+02:00 "Abdulsamed Akin (born July 17, 1991) is a Turkish-German footballer who plays for Stuttgarter Kickers."@en "Abdulsamed Akin (* 17. Juli 1991 in Stuttgart) ist ein deutscher Fußballspieler türkischer Abstammung."@de http://en.wikipedia.org/wiki/Abdulsamed_Akin "Footballer"@en http://commons.wikimedia.org/wiki/Special:FilePath/Abdulsamed_Akin.jpg?width=300

что у меня есть на фузеках:

Первый ряд:

"Abdulsamed Akin"@en "1991-07-17"^^<http://www.w3.org/2001/XMLSchema#date> [empty] [empty] [empty] [empty] "Footballer"@en [empty]

Как вы можете видеть, текст описания и ссылки на википедию и изображение отсутствуют в моем локальном запросе.

Различные атрибуты находятся в разных наборах данных TDB из-за отдельных файлов .nt из DBpedia. ?Имя, ?рождение и ?описание находятся в TDB из "Persondata", ?wiki в "Links to Wikipedia Articel" и ?pic в "Images".

Поэтому мне нужно сделать запрос из разных источников данных TDB или как-то их объединить.

Что я сделал на данный момент:

Скачав .nt-файлы и используя на них tdbloader, у меня получилось пять tdb-папок, которые я положил в свои локальные фузеки. Затем я собрал эти две конфигурации с целью объединения наборов данных tdb, поэтому я могу выполнить вышеуказанный запрос, но ни один из них не сработал:

Первый:

@prefix :        <#> .
@prefix fuseki:  <http://jena.apache.org/fuseki#> .
@prefix rdf:     <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

@prefix rdfs:    <http://www.w3.org/2000/01/rdf-schema#> .
@prefix tdb:     <http://jena.hpl.hp.com/2008/tdb#> .
@prefix ja:      <http://jena.hpl.hp.com/2005/11/Assembler#> .

[] rdf:type fuseki:Server ;
   fuseki:services (
     <#service1>
   ) .

# TDB
[] ja:loadClass "com.hp.hpl.jena.tdb.TDB" .
tdb:DatasetTDB  rdfs:subClassOf  ja:RDFDataset .
tdb:GraphTDB    rdfs:subClassOf  ja:Model .

<#service1> rdf:type fuseki:Service ;
    # URI of the dataset -- http://localhost:3030/ds
    fuseki:name                        "ds" ; 
    fuseki:serviceQuery                "sparql" ;   
    fuseki:serviceReadGraphStore       "data" ;
    fuseki:serviceReadGraphStore       "get" ;
    fuseki:dataset                     <#dataset> ;
    .

## ----------------------------------
## dataset for default graph
<#dataset> rdf:type      ja:RDFDataset ;
     ja:defaultGraph <#dbenGraph> ;
     #ja:namedGraph
     #   [ ja:graphName      <http://localhost:3030/dbenGraph> ;
     #     ja:graph          <#dbenGraph> ] ;
     ja:namedGraph
        [ ja:graphName       <http://localhost:3030/dbdeGraph> ;
          ja:graph           <#dbdeGraph> ] ;
     ja:namedGraph
        [ ja:graphName       <http://localhost:3030/dbinterGraph> ;
          ja:graph           <#dbinterGraph> ] ;
     ja:namedGraph
        [ ja:graphName       <http://localhost:3030/dbpicGraph> ;
          ja:graph           <#dbpicGraph> ] ;
     ja:namedGraph
        [ ja:graphName       <http://localhost:3030/dbwikiGraph> ;
          ja:graph           <#dbwikiGraph> ] ;
     .

## ----------------------------------
## the graph's  
<#dbenGraph> rdf:type tdb:GraphTDB ;
    tdb:dataset <#dbpedia_en> ;
    tdb:unionDefaultGraph   true ;
    .

<#dbdeGraph> rdf:type tdb:GraphTDB ;
    tdb:dataset <#dbpedia_de> ;
    tdb:unionDefaultGraph   true ;
    .

<#dbinterGraph> rdf:type tdb:GraphTDB ;
    tdb:dataset <#dbpedia_inter> ;
    tdb:unionDefaultGraph   true ;
    .

<#dbpicGraph> rdf:type tdb:GraphTDB ;
    tdb:dataset <#dbpedia_wiki> ;
    tdb:unionDefaultGraph   true ;
    .

<#dbwikiGraph> rdf:type tdb:GraphTDB ;
    tdb:dataset <#dbpedia_inter> ;
    tdb:unionDefaultGraph   true ;
    .

## DB of persons in Englisch
<#dbpedia_en> rdf:type      tdb:DatasetTDB ;
    tdb:location            "db" ;
    tdb:unionDefaultGraph   true ;
    .

## DB of persons in German
<#dbpedia_de> rdf:type      tdb:DatasetTDB ;
    tdb:location            "dbde" ;
    tdb:unionDefaultGraph   true ;
    .

## DB of persons inter-language-link
<#dbpedia_inter> rdf:type      tdb:DatasetTDB ;
    tdb:location               "dbinter" ;
    tdb:unionDefaultGraph      true ;
    .

## DB of image-links
<#dbpedia_pic> rdf:type      tdb:DatasetTDB ;
    tdb:location "dbpic" ;
    tdb:unionDefaultGraph true ;
    .

## DB of wiki-links
<#dbpedia_wiki> rdf:type      tdb:DatasetTDB ;
    tdb:location "dbwiki" ;
    tdb:unionDefaultGraph true ;
    .

Второй:

@prefix :        <#> .
@prefix fuseki:  <http://jena.apache.org/fuseki#> .
@prefix rdf:     <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

@prefix rdfs:    <http://www.w3.org/2000/01/rdf-schema#> .
@prefix tdb:     <http://jena.hpl.hp.com/2008/tdb#> .
@prefix ja:      <http://jena.hpl.hp.com/2005/11/Assembler#> .

[] rdf:type fuseki:Server ;

   fuseki:services (
     <#service1>
   ) .

# TDB
[] ja:loadClass "com.hp.hpl.jena.tdb.TDB" .
tdb:DatasetTDB  rdfs:subClassOf  ja:RDFDataset .
tdb:GraphTDB    rdfs:subClassOf  ja:Model .

## ---------------------------------------------------------------
## Services.

<#service1> rdf:type fuseki:Service ;
    # URI of the dataset -- http://localhost:3030/ds
    fuseki:name                        "ds" ; 
    fuseki:serviceQuery                "sparql" ;   
    fuseki:serviceReadGraphStore       "data" ;
    fuseki:serviceReadGraphStore       "get" ;
    fuseki:dataset                     <#dataset> ;
    .

<#dataset> rdf:type       ja:RDFDataset ;
    ja:defaultGraph       <#model_inf> ;
    .

<#model_inf> a ja:InfModel ;
    ja:baseModel <#dbenGraph> ;
    ja:reasoner [
        ja:reasonerURL <http://jena.hpl.hp.com/2003/OWLMicroFBRuleReasoner>
    ] 
    .

<#dbenGraph> rdf:type tdb:GraphTDB ;
    tdb:dataset <#dbpedia_en> ;
    tdb:unionDefaultGraph   true ;
    .   

## DB of Persons in Englisch
<#dbpedia_en> rdf:type      tdb:DatasetTDB ;
    tdb:location            "db" ;
    tdb:unionDefaultGraph   true ;
    .

## DB of Persons in German
<#dbpedia_de> rdf:type      tdb:DatasetTDB ;
    tdb:location            "dbde" ;
    tdb:unionDefaultGraph   true ;
    .

## DB of Persons inter-language-link
<#dbpedia_inter> rdf:type      tdb:DatasetTDB ;
    tdb:location               "dbinter" ;
    tdb:unionDefaultGraph      true ;
    .

## DB von Resource auf Image
<#dbpedia_pic> rdf:type      tdb:DatasetTDB ;
    tdb:location "dbpic" ;
    tdb:unionDefaultGraph true ;
    .

## DB von Resource auf Wiki
<#dbpedia_wiki> rdf:type      tdb:DatasetTDB ;
    tdb:location "dbwiki" ;
    tdb:unionDefaultGraph true ;
    .

Почему в локальном запросе отсутствуют атрибуты? Я неправильно настроил или запросил фьюзки? Их что-то отсутствует в запросе? Есть ли другой способ добиться того, чего я хочу?

Я надеюсь, что ясно сообщил, что мне нужно, если нет, не стесняйтесь спрашивать!


  • Кроме того, обычно лучше фильтровать с помощью langMatches(lang(?x),'en'), чем с помощью lang(?x) = 'en', так как он правильно обрабатывает сложные языковые теги (например, «en-us»). 01.10.2014

Ответы:


1

Нет абсолютно никакой необходимости загружать каждый отдельный файл в отдельный набор данных TDB, если вы действительно не хотите хранить данные отдельно по какой-либо причине.

Из вашего описания проблемы кажется, что вы хотите, чтобы все данные были объединены вместе, поэтому вам лучше просто создать один набор данных TDB и запросить его. tdbloader с радостью позволит вам загружать несколько файлов в одну базу данных TDB.

Что касается того, почему ваша текущая настройка не работает, это потому, что вы подключаете свой сервис только к одному из ваших наборов данных TDB.

01.10.2014
  • да, верно, мне не нужно, чтобы они были разделены, но я не знал, что их можно поместить в один tdb из нескольких .nt-файлов. сейчас я пытаюсь tdbloader -loc=location file1 file2 file3.. это правильное использование tdbloader для достижения этой цели? (это займет некоторое время, я подумал, что спрошу, пока жду) 01.10.2014
  • Потенциально есть много причин для использования отдельных файлов. Совершенно очевидно, что разные наборы данных могут обновляться с разной периодичностью — некоторые из них стабильны, а некоторые нет. Загрузка в TDB может занять много времени, поэтому имеет смысл разделить изменчивые и менее изменчивые данные в отдельные наборы данных. Напрашивается множество других причин. Возможно, вы запускаете отдельные серверы в целях безопасности, а некоторые наборы данных просто не должны размещаться на доступном извне сайте. 18.02.2015

  • 2

    У меня это работало в дзёсэки, но фузеки почему-то меня огорчает.

    1 - иметь несколько наборов данных TDB

    :ds1 a tdb:DatasetTDB ; tdb:location "dir1" .
    :ds2 a tdb:DatasetTDB ; tdb:location "dir2" .
    

    2 - сделать несколько графиков

    :g1 a tdb:GraphTDB ; tdb:dataset :ds1 ; tdb:graphName foo:the-dataset .
    :g2 a tdb:GraphTDB ; tdb:dataset :ds2 ; tdb:graphName bar:the-dataset .
    

    3 - сделать граф объединения

    :g a ja:UnionModel
      ; ja:subModel :g1
      ; ja:subModel :g2
    

    4 - в вашем наборе данных используйте этот график объединения в качестве графика по умолчанию

    :dataset a ja:RDFDataset
     ; ja:defaultGraph :g
     ; ja:namedGraph [ ja:graphName foo:the-graph ; ja:graph :g1 ]
     ; ja:namedGraph [ ja:graphName bar:the-graph ; ja:graph :g2 ]
    ]
    

    Ваши запросы выполняются по умолчанию, но вы также можете запросить конкретно любой график с предложением sparql

    WHERE { GRAPH foo:the-graph { ?S ?p ?o } }
    
    18.02.2015
  • Вы заставили приведенный выше пример работать в Fuseki? Мне нравится, что если вы не знаете имен диаграмм, вы можете запросить все через диаграмму по умолчанию, но если вы знаете имена диаграмм, вы можете использовать конкретную. Мне также интересно, что произойдет, если вы выберете как график по умолчанию, так и именованный график... вернет ли он повторяющиеся результаты, потому что график по умолчанию включает именованный график? 15.11.2016
  • Я так и не запустил Fuseki. То, что у нас есть, работает, хотя я вижу, что в данный момент оно не работает. Между прочим, чтобы ограничить случайные запросы на выборку, пытающиеся высосать все содержимое нашей базы данных, наш график по умолчанию представляет собой статический набор терминов, описывающих, какие графики у нас есть и что в них содержится. То есть наш график по умолчанию — метаданные сервера. 04.12.2016
  • Спасибо! Мне удалось заставить это работать в Apache Jena/Fuseki, создав свой собственный AssemblerBase. Я использую MultiUnion. чтобы объединить три именованных графика в один график по умолчанию. 05.12.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..