Как перевести логическое предложение первого порядка в ограничение в Protègè с сопоставлением строк?

Я пытаюсь построить онтологию, чтобы вывести некоторую информацию о классификации предметной области и терминологии, но у меня возникают некоторые концептуальные трудности.

Позвольте мне объяснить проблему. В Protègè 4.1 я создал 6 подклассов Thing: Concept, conceptTitle, ConceptSynonym (для классификации) и Term, TermTitle, TermSynonym (для терминологии). Я также создал отношения объектов hasConceptTitle, hasConceptSynonym, hasTermTitle и hasTermSynonym (с некоторым ограничением), чтобы сказать, что у каждой концепции есть один (и только один) заголовок и могут быть некоторые синонимы, и каждый термин имеет один (и только один) заголовок и некоторые синонимы. И понятие, и термин имеют другое отношение isA, придающее классификации DAG/древовидную структуру, в то время как терминология имеет решетчатую структуру (другими словами, термин может быть подклассом более чем одного термина).

Здесь возникает проблема: я хотел бы создать подкласс Concept, скажем, «MappedConcept»), который должен быть набором сопоставленных концептов, то есть набором концептов, у которых заголовок равен названию термина, или он имеет синоним равен названию термина или имеет синоним, равный синониму термина. В логике первого порядка это множество может быть выражено как:

∀x∃y( ∃z((hasConceptTitle(x,z) ∧ hasTermTitle(y,z)) ∨
      ∃z((hasConceptTitle(x,z) ∧ hasTermSynonym(y,z)) ∨
      ∃z((hasConceptSynonym(x,z) ∧ hasTermTitle(y,z)) ∨
      ∃z((hasConceptSynonym(x,z) ∧ hasTermSynonym(y,z)) )

Как я могу получить это? Определение свойств данных для «ConceptTitle», «ConceptSynonym», «TermTitle» и «TermSynonym»? А как описать совпадения строк? Может быть, эти 4 класса должны быть просто свойствами данных классов Concept и Term? Я несколько раз читал практическое руководство Мэтью Хорриджа, но не могу превратить те практические идеи, которые у меня в голове, в онтологию в Protègè.

Заранее спасибо.


person Oscar    schedule 17.12.2012    source источник
comment
То, что вы выражаете формулой ФОЛ, не является набором. Это выражение является либо истинным, либо ложным, в зависимости от того, как вы интерпретируете hasConceptTitle, hasConceptSynonym, hasTermTitle и hasTermSynonym.   -  person Antoine Zimmermann    schedule 18.12.2012
comment
@AntoineZimmermann Спасибо за ваш ответ, я плохо выразил свою идею. Однако, имея простое объектное отношение isMapped с понятием в качестве домена и термином в качестве диапазона, как я могу ограничить его классификацией понятия в подклассе MappedConcept, который удовлетворяет этому выражению?   -  person Oscar    schedule 18.12.2012
comment
Использование формулы FOL не является проблемой, и вы действительно хотите определить набор. Но вы должны сказать, что является вещью в наборе в формуле. Я подозреваю, что вы хотели бы определить множество вещей x таким образом, что существует вещь y такая, что существует z и т. д. Это правильно?   -  person Antoine Zimmermann    schedule 18.12.2012
comment
@AntoineZimmermann: Еще раз спасибо за вашу поддержку. Я хотел бы определить множество Вещей x, таких что x является Концепцией, таким образом, что существует Вещь y, что y является Термином, и x имеет ConceptTitle z, а y имеет название Термина z, или x имеет ConceptSynonym z и y имеет TermTitle z., ... Может быть, моя проблема в том, что я пришел из языков программирования, где я делаю что-то вроде if( ((Concept) x).getTitle() == ((Term) y).getTitle() ), затем печатайте (Эти объекты нанесены на карту);   -  person Oscar    schedule 18.12.2012


Ответы (1)


Боюсь, вы не можете сделать это ни в OWL 2 DL, ни в Protégé, который является редактором для OWL 2 DL, потому что, насколько я могу судить, представляется необходимым ввести обратное свойство типа данных, что запрещено в СОВ 2 ДЛ. Тем не менее, это возможно в OWL Full, и некоторые специалисты по DL могут даже справиться с этим. Здесь, в Черепахе:

<MappedConcept>  a  owl:Class;
    owl:equivalentTo  [
        a  owl:Class;
        owl:unionOf (
            [
                a  owl:Restriction;
                owl:onProperty  <hasConceptTitle>;
                owl:someValuesFrom  [
                    a  owl:Restriction;
                    owl:onProperty  [ owl:inverseOf <hasTermTitle> ];
                    owl:someValuesFrom  <Term>
                ]
            ] [
                a  owl:Restriction;
                owl:onProperty  <hasConceptTitle>;
                owl:someValuesFrom  [
                    a  owl:Restriction;
                    owl:onProperty  [ owl:inverseOf <hasTermSynonym> ];
                    owl:someValuesFrom  <Term>
                ]
            ] [
                a  owl:Restriction;
                owl:onProperty  <hasConceptSynonym>;
                owl:someValuesFrom  [
                    a  owl:Restriction;
                    owl:onProperty  [ owl:inverseOf <hasTermSynonym> ];
                    owl:someValuesFrom  <Term>
                ]
            ] [
                a  owl:Restriction;
                owl:onProperty  <hasConceptSynonym>;
                owl:someValuesFrom  [
                    a  owl:Restriction;
                    owl:onProperty  [ owl:inverseOf <hasTermTitle> ];
                    owl:someValuesFrom  <Term>
                ]
            ]
        )
    ] .

Вы также можете сделать это без OWL, например, с помощью языка правил. Правила будут выглядеть ближе к тому, как вы делаете это на языках программирования. В SWRL:

hasConceptTitle(?x,?z), hasTermTitle(?y,?z) -> MappedConcept(?x)
hasConceptTitle(?x,?z), hasTermSynonym(?y,?z) -> MappedConcept(?x)
hasConceptSynonym(?x,?z), hasTermTitle(?y,?z) -> MappedConcept(?x)
hasConceptSynonym(?x,?z), hasTermSynonym(?y,?z) -> MappedConcept(?x)
person Antoine Zimmermann    schedule 21.12.2012
comment
Большое спасибо, Антуан, ваши предложения действительно ценны. Я изменю свой подход к решению этой проблемы. Еще раз спасибо, хорошего Рождества и счастливого Нового года! - person Oscar; 21.12.2012