Проверьте различия между моделями RDF с недетерминированными (на основе UUID) URI? - PullRequest
0 голосов
/ 30 мая 2019

Колледж и я индивидуально создаем электронные медицинские записи в три раза. Мы бы хотели сравнить наши наборы от трёх до 100 тысяч , чтобы увидеть, имеют ли они одинаковую форму.

В качестве политики я создаю URI на основе UUID , поэтому в них не заложено ничего семантического. Я хотел бы придерживаться этой политики, так как мой колледж и я действительно пытаемся целостно сравнить существующие рабочие процессы.

Я знаю, как сравнивать два файла RDF в TopBraid Composer, но я не думаю, что это будет полезно, если у нас будут одинаковые шаблоны данных, но разные URI. Я храню свои тройки в Ontotext GraphDB, но рад использовать любой другой инструмент.

Например, тройки о человеке ... fe54977c174a и человеке ... 4bcdc1c8abf9 должны считаться эквивалентными, но ... fe54977c174a и ... ae00dc86b3bb не должны. Возможно ли это?

Я бы предпочел не проводить выборочную проверку с помощью созданных вручную операторов SPARQL ASK.

@prefix ns0: <http://example.com/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

<http://example.com/4f79ea05-2358-4f43-a335-fe54977c174a>
  a <http://example.com/Person> ;
  ns0:gender ns0:Male ;
  ns0:participatesIn ns0:5d2dfc7b-994c-4933-b787-f7971dae397c .

ns0:5d2dfc7b-994c-4933-b787-f7971dae397c
  a ns0:HealthCareEncounter ;
  ns0:startDate "2019-05-01"^^xsd:date ;
  ns0:hasOutput ns0:a129ca96-c6d2-4a07-a4eb-4cf9ce23a314 .

ns0:a129ca96-c6d2-4a07-a4eb-4cf9ce23a314
  a ns0:Diagnosis ;
  ns0:mentions ns0:Headache .

имеет такую ​​же форму, как эта (несмотря на разные URI):

@prefix ns0: <http://example.com/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

<http://example.com/a740d254-084c-4621-b06d-4bcdc1c8abf9>
  a <http://example.com/Person> ;
  ns0:gender ns0:Male ;
  ns0:participatesIn ns0:060d2091-b4f7-406d-ab0d-75b39b400823 .

ns0:060d2091-b4f7-406d-ab0d-75b39b400823
  a ns0:HealthCareEncounter ;
  ns0:startDate "2019-05-01"^^xsd:date ;
  ns0:hasOutput ns0:bc549711-ed9d-4db6-8cf9-d43022903ef7 .

ns0:bc549711-ed9d-4db6-8cf9-d43022903ef7
  a ns0:Diagnosis ;
  ns0:mentions ns0:Headache .

, но это структурно отличается (из-за различного пола и диагноза):

@prefix ns0: <http://example.com/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

<http://example.com/aa3a977a-999a-4c5c-9524-ae00dc86b3bb>
  a <http://example.com/Person> ;
  ns0:gender ns0:Female ;
  ns0:participatesIn ns0:b31a62a5-337a-454d-a637-85aefef26684 .

ns0:b31a62a5-337a-454d-a637-85aefef26684
  a ns0:HealthCareEncounter ;
  ns0:startDate "2019-05-01"^^xsd:date ;
  ns0:hasOutput ns0:6566d543-773e-4649-b589-66eb3d0f3165 .

ns0:6566d543-773e-4649-b589-66eb3d0f3165
  a ns0:Diagnosis ;
  ns0:mentions ns0:Nausea .

1 Ответ

1 голос
/ 31 мая 2019

Eclipse Rdf4j (в комплекте с GraphDB) содержит утилиту изоморфизма графов: Models.isomorphic . По умолчанию он делает только пустые сопоставления узлов. Итак, у вас есть два варианта:

  1. сделать замену каждого IRI на ваших графиках пустым узлом (с отображением в словаре). Это должно быть довольно легко сделать с помощью HashMap и немного зацикливания или потоковой магии.
  2. взгляните на код для утилиты Models и адаптируйте бит, где она выполняет отображение пустых узлов, вместо этого для отображения IRI.
...