СУЩЕСТВУЕТ ли простой запрос конструкции SPARQL для выбора всех операторов, связанных с предметом, по определенному значению предиката

#rdf #semantic-web #rdf4j

#rdf #семантический веб #rdf4j

Вопрос:

Я полный новичок в семантической сети и новичок в RDF4J. В настоящее время у меня есть некоторый RDF xml, и я не могу написать простой конструктивный запрос для выбора всех связанных операторов по значению объекта. У меня есть это:

 <?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF 
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">

<rdf:Description rdf:about="http://example.org/cocktail#Mimosa">
    <rdf:type rdf:resource="http://www.w3.org/2004/02/skos/core#Concept"/>
    <prefLabel xmlns="http://www.w3.org/2004/02/skos/core#">Mimosa</prefLabel>
    <altLabel xmlns="http://www.w3.org/2004/02/skos/core#">bla</altLabel>
    <altLabel xmlns="http://www.w3.org/2004/02/skos/core#">huuh</altLabel>
    <altLabel xmlns="http://www.w3.org/2004/02/skos/core#">owiii</altLabel>
    <broader xmlns="http://www.w3.org/2004/02/skos/core#">Wine cocktail</broader>
</rdf:Description>

<rdf:Description rdf:about="http://example.org/cocktail#White Russian">
    <rdf:type rdf:resource="http://www.w3.org/2004/02/skos/core#Concept"/>
    <prefLabel xmlns="http://www.w3.org/2004/02/skos/core#">White Russian</prefLabel>
    <altLabel xmlns="http://www.w3.org/2004/02/skos/core#">Ruski</altLabel>
    <altLabel xmlns="http://www.w3.org/2004/02/skos/core#">kasdnjkldfan</altLabel>
    <altLabel xmlns="http://www.w3.org/2004/02/skos/core#">oasdasi</altLabel>
    <broader xmlns="http://www.w3.org/2004/02/skos/core#">Wine cocktail</broader>
</rdf:Description>

</rdf:RDF> 

Я хочу написать простой запрос, который принимает предварительную метку в качестве аргумента и выбирает целый блок операторов (все в описании, включая само описание).
Например, у меня есть значение «Mimosa» для предварительной маркировки, и теперь я хочу получить это:

 <?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF 
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">

<rdf:Description rdf:about="http://example.org/cocktail#Mimosa">
    <rdf:type rdf:resource="http://www.w3.org/2004/02/skos/core#Concept"/>
    <prefLabel xmlns="http://www.w3.org/2004/02/skos/core#">Mimosa</prefLabel>
    <altLabel xmlns="http://www.w3.org/2004/02/skos/core#">bla</altLabel>
    <altLabel xmlns="http://www.w3.org/2004/02/skos/core#">huuh</altLabel>
    <altLabel xmlns="http://www.w3.org/2004/02/skos/core#">owiii</altLabel>
    <broader xmlns="http://www.w3.org/2004/02/skos/core#">Wine cocktail</broader>
</rdf:Description>

</rdf:RDF> 

Ответ №1:

Вы можете сделать это следующим образом:

    CONSTRUCT 
   WHERE { 
         ?c a skos:Concept ;
            skos:prefLabel "Mimosa" ;
            ?property ?value .
   }
 

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

Совет: это помогает не фокусироваться на синтаксисе RDF / XML. Подумайте о RDF в терминах графика, а не документа XML. Это может помочь вам работать с файлами RDF в другом синтаксисе, например, Turtle (который более точно соответствует тому, как все работает в SPARQL).

Комментарии:

1. Спасибо. Ваш ответ многое прояснил и сработал. Я также просмотрел ваши видеоролики на YouTube о RDF и проверил ваше репозиторий github на наличие образцов. Это было очень полезно. Спасибо за распространение знаний!