У меня есть тройки, которые говорят, что пациент P участвует в медицинской встрече с E, которая выдала рецепт на лекарство M. По рецепту может быть mention препарат из Онтологии лекарств или DrOn.
В этом случае предположим, что M1 упоминает о препарате для снижения уровня холестерина аторвастатин, который был импортирован в DrOn из ChEBI как http://purl.obolibrary.org/obo/CHEBI_39548:
prefix obo: <http://purl.obolibrary.org/obo/>
:M1 obo:IAO_0000142 obo:CHEBI_39548 .
У ChEBI есть аксиома, что obo: CHEBI_39548 играет роль http://purl.obolibrary.org/obo/CHEBI_35821, «антихолестеринемический препарат». Это упрощает поиск пациентов, которым прописали аторвастатин или другие препараты с той же ролью.
К сожалению, DrOn создал собственные термины для некоторых лекарств вместо того, чтобы импортировать их из ChEBI. Например, другой препарат, снижающий уровень холестерина, розувастатин, моделируется как http://purl.obolibrary.org/obo/DRON_00018679 вместо http://purl.obolibrary.org/obo/CHEBI_38545. Термин ChEBI для розувастатина также аннотируется ролью obo: CHEBI_39548, но obo: DRON_00018679 - нет. Таким образом, пациенты из моего набора данных, которым прописали розувастатин, не отображаются в моем существующем ролевом запросе.
У меня есть эти данные в репозитории GraphDB RDFS-plus, и я бы предпочел не менять уровень рассуждений прямо сейчас. Если бы это был репозиторий OWL, я бы просто сказал
obo:CHEBI_38545 owl:equivalentClass obo:DRON_00018679
Могу ли я сделать что-то подобное с RDFS или настраиваемым набором правил GraphDB?
@StanislavKralin Спасибо, я думаю, ответный rdfs:subClassOf подойдет, даже если выглядит немного забавно. Извините, я еще не пробовал утверждать owl:equivalentClass. Я сделаю это сейчас с небольшим набором данных для тщательности.
Учитывая, что owl:equivalentClass - это просто синтаксический сахар, единственный ответ, как сказал Станислав, - rdfs:subClassOf в обоих направлениях.





If it was an OWL repository, I would just say
obo:CHEBI_38545 owl:equivalentClass obo:DRON_00018679Is there something similar I can do with RDFS, or a GraphDB custom ruleset?
Первый
Очевидно, вы можете заменить owl:equivalentClass двумя противоположными rdfs:subClassOf. Что касается самой эквивалентности этих формулировок, я полагаю, это уместно:
OWL 2 Прямая семантика, Таблица 4;
OWL 2 Семантика на основе RDF, Таблица 5.8 и Таблица 5.9.
Второй
owl:equivalentClass уже находится в RDFS-Plus.
Из главы 7 1-го издания Семантическая сеть для рабочего онтолога, где впервые был представлен RDFS-Plus:
RDFS-Plus provides a more intuitive expression of class equivalence, using the construct
owl:equivalentClass.
В GraphDB наборы правил RDFS-Plus и RDFS-Plus (оптимизированный) поддерживают owl:equivalentClass. В файле builtin_rdfsPlus-optimized.pie действует следующее правило:
Id: owl_EquivClassBySubClass
a <rdfs:subClassOf> b [Constraint b != a]
b <rdfs:subClassOf> a [Cut]
------------------------------------
a <owl:equivalentClass> b
и следующие аксиомы:
<owl:equivalentClass> <rdf:type> <owl:TransitiveProperty>
<owl:equivalentClass> <rdf:type> <owl:SymmetricProperty>
<owl:equivalentClass> <rdfs:subPropertyOf> <rdfs:subClassOf>
В более высоких профилях вместо этого используются два правила:
Id: scm_eqc1
c1 <owl:equivalentClass> c2 [Constraint c1 != c2 ]
-------------------------------
c1 <rdfs:subClassOf> c2
c2 <rdfs:subClassOf> c1
Id: scm_eqc2
c1 <rdfs:subClassOf> c2 [Constraint c1 != c2 ]
c2 <rdfs:subClassOf> c1
-------------------------------
c1 <owl:equivalentClass> c2
Когда я использую обратную оценку rdfs:subClassOf @ StanislavKralin в репозитории RDFS + GraphDB ...
:x и :y, с экземпляром :z класса :x:x и :y являются подклассами друг друга
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
prefix : <http://localhost/>
insert data {
:x a owl:Class .
:y a owl:Class .
:z a :x .
:x rdfs:subClassOf :y .
:y rdfs:subClassOf :x .
}
Затем запросите все тройки о :x, :y и :z.
select * where {
?s ?p ?o .
filter(regex(str(?s), "localhost"))
}
order by ?s ?p ?o
Я получаю owl:equivalentClass бесплатно!
+----+---------------------+-----------+
| s | p | o |
+----+---------------------+-----------+
| :x | rdf:type | owl:Class |
| :x | rdfs:subClassOf | :x |
| :x | rdfs:subClassOf | :y |
| :x | owl:equivalentClass | :x |
| :x | owl:equivalentClass | :y |
| :y | rdf:type | owl:Class |
| :y | rdfs:subClassOf | :x |
| :y | rdfs:subClassOf | :y |
| :y | owl:equivalentClass | :x |
| :y | owl:equivalentClass | :y |
| :z | rdf:type | :x |
| :z | rdf:type | :y |
+----+---------------------+-----------+
Вам нужен только
obo:CHEBI_38545 rdfs:subClassOf obo:DRON_00018679 . obo:DRON_00018679 rdfs:subClassOf obo:CHEBI_38545? Кроме того, не входит лиowl:equivalentClassв RDFS +?