Существует ли запрос SPARQL для отслеживания различных этапов одного рабочего процесса в одной строке?

Я использую GraphDB для хранения различных этапов производства. Шаги производства представлены такими шагами, как A,B,C,D. Связанные друг с другом шаги процесса связаны свойством объекта ":hasUpstreamProduktionsnummer".

Данные содержат множество различных рабочих процессов. Где также отсутствуют несколько производственных этапов. Итак, рабочий процесс может заканчиваться экземпляром класса B или начинаться экземпляром класса C.

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

      A1  B1  C1
    B2  C2
A3  B3  
A4      
        C4

Мой подход был таков:hasUpstreamProduktionsnummer as transtiv и следующее:

          select distinct ?A ?B ?C where {
    
    {   ?A a :A.
    ?A :hasUpstreamProduktionsnummer ?AUP.}
Optional
    { ?B owl:sameAs ?AUP.
    ?B a :B.}
Optional
    { ?C owl:sameAs ?AUP.
    ?C a :C. }
}
  

Запрос для рабочего процесса 1 приведет к следующему:

          A1      C1
    A1  B1  
    A1  

Есть ли возможность запросить их в одну строку?

Есть ли какой-нибудь более эффективный запрос? В моем случае мне нужно было бы записать то же самое для B и C в качестве отправной точки.

Данные:

      @base <http://BLB.de/Daten/Produktionsdaten/>
@prefix : <http://BLB.de/Daten/Produktionsdaten/> .
<A1> a :A;
:hasUpstreamProduktionsnummer <B1>.
<B1> a :B;
:hasUpstreamProduktionsnummer <C1>.
<C1> a :C.
<B2> a :B;
:hasUpstreamProduktionsnummer <C2>.
<C2> a :C.
<A3> a :A;
:hasUpstreamProduktionsnummer <B3>.
<B3> a :B.
<A4> a :A.
<C4> a :C

Заранее спасибо за помощь!

1 ответ

Проблема решена UninformedUser с элементами SPARQL Необязательно, объединение и фильтр не существует в следующем запросе:

      prefix : <http://BLB.de/Daten/Produktionsdaten/>  
select distinct ?A ?B ?C where {  
{ ?A a :A. 
OPTIONAL {?A :hasUpstreamProduktionsnummer ?B . 
?B a :B 
Optional{?B :hasUpstreamProduktionsnummer ?C . 
?C a :C. }} }
UNION { ?B a :B 
Optional{?B :hasUpstreamProduktionsnummer ?C . ?C a :C. } 
filter not exists {?A :hasUpstreamProduktionsnummer ?B} } 
UNION { ?C a :C.  filter not exists {?B :hasUpstreamProduktionsnummer ?C} } }
Другие вопросы по тегам