УДАЛИТЬ ГДЕ не работает с последовательностями путей к свойствам sparql - PullRequest
0 голосов
/ 28 апреля 2020

ЧАСТЬ 1:

Это триплеты, которые уже существуют.

<http:o1>   <http:name>   "name"^^xsd:string
<http:o1>   <http:place>   "place"^^xsd:string
<http:o1>   <http:hasContained>   <http:o2>
<http:o2>   <http:name>   "name1"^^xsd:string
<http:o2>   <http:place>   "place2"^^xsd:string
<http:o2>   <http:hasContained>   <http:o3>
<http:o3>   <http:name>   "name3"^^xsd:string
<http:o3>   <http:place>   "place3"^^xsd:string

Я хочу удалить свойства узлов, которые находятся на расстоянии 2 узлов от узла o1.

delete where { <http:o1> <http:hasContained>/<http:hasContained> ?s. ?s ?p ?o}

Я придумал этот запрос для удаления триплетов, связанных с узлом o3. Но когда я запускаю этот запрос, я получаю некоторые ошибки.

Malformed query: Encountered " "/" "/ "" at line 1, column 731.
Was expecting one of:
    "(" ...
    "[" ...
    <NIL> ...
    <ANON> ...
    "true" ...
    "false" ...
    <Q_IRI_REF> ...
    <PNAME_NS> ...
    <PNAME_LN> ...
    <BLANK_NODE_LABEL> ...
    <VAR1> ...
    <VAR2> ...
    <INTEGER> ...
    <INTEGER_POSITIVE> ...
    <INTEGER_NEGATIVE> ...
    <DECIMAL> ...
    <DECIMAL_POSITIVE> ...
    <DECIMAL_NEGATIVE> ...
    <DOUBLE> ...
    <DOUBLE_POSITIVE> ...
    <DOUBLE_NEGATIVE> ...
    <STRING_LITERAL1> ...
    <STRING_LITERAL2> ...
    <STRING_LITERAL_LONG1> ...
    <STRING_LITERAL_LONG2> ... 

С некоторыми альтернативными запросами я мог бы выполнить эту работу.

Но что является ошибкой в ​​приведенном выше запросе?

Почему запрос свойства пути не работает с delete, где?

ЧАСТЬ 2:

Для тех же данных триплетов запрос на удаление всех используемых триплетов:

delete {?s ?p ?o} where { <http:o1> (<http:hasContained>/<http:hasContained>?)? ?s. ?s ?p ?o}

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

construct {?s ?p ?o} where { <http:o1> (<http:hasContained>/<http:hasContained>?)? ?s. ?s ?p ?o}

В чем проблема в этих запросах, я что-то упустил?

Ответы [ 2 ]

2 голосов
/ 29 апреля 2020

В моем понимании синтаксиса SPARQL сокращение DELETE WHERE ... не допускает пути к свойствам. Однако полная форма DELETE ... WHERE ... работает, поэтому вы можете сделать это:

DELETE {?s ?p ?o}
WHERE {
    <http:o1> <http:hasContained>/<http:hasContained> ?s. ?s ?p ?o
}
2 голосов
/ 28 апреля 2020

Мы проверяли SPARQL Spe c. на этом. Можете ли вы проверить, подходит ли вам следующая версия?

  delete { <http:o1> <http:hasContained>/<http:hasContained> ?s. ?s ?p ?o} where { <http:o1> <http:hasContained>/<http:hasContained> ?s. ?s ?p ?o}
...