Protege-OWL: класс должен иметь по одному из каждого <value>

Я новичок в протеже, и мне нужно смоделировать сетку с аналогичными свойствами по soduku, в синтаксисе Манчестер OWL.

Я искал, но я не могу найти способ сделать аксиому, которая говорит, что "каждый столбец должен иметь 4 ячейки и должен иметь каждое из этих значений". Например, в столбце 4x1 каждая ячейка должна содержать одно число, а в столбце должны быть все числа [1:4].

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

Вся помощь высоко ценится.

Prefix: dc: <http://purl.org/dc/elements/1.1/>
Prefix: owl: <http://www.w3.org/2002/07/owl#>
Prefix: rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
Prefix: rdfs: <http://www.w3.org/2000/01/rdf-schema#>
Prefix: GridTest: <http://www.semanticweb.org/existance/ontologies/2017/4/GridTest#>
Prefix: xml: <http://www.w3.org/XML/1998/namespace>
Prefix: xsd: <http://www.w3.org/2001/XMLSchema#>



Ontology: <http://www.semanticweb.org/existance/ontologies/2017/4/GridTest>


Datatype: xsd:int


Datatype: xsd:integer


ObjectProperty: GridTest:hasCell

    SubPropertyOf: 
        GridTest:hasRelation

    Domain: 
        GridTest:Grid

    InverseOf: 
        GridTest:isCellOf


ObjectProperty: GridTest:hasColum

    SubPropertyOf: 
        GridTest:hasRelation

    Domain: 
        GridTest:Grid

    Range: 
        GridTest:Grid

    InverseOf: 
        GridTest:isColumOf


ObjectProperty: GridTest:hasRelation


ObjectProperty: GridTest:isCellOf

    InverseOf: 
        GridTest:hasCell


ObjectProperty: GridTest:isColumOf

    InverseOf: 
        GridTest:hasColum


DataProperty: GridTest:hasValue

    Characteristics: 
        Functional

    Domain: 
        GridTest:Cell

    Range: 
        {"1"^^xsd:int , "2"^^xsd:int , "3"^^xsd:int , "4"^^xsd:int}


Class: GridTest:Cell

    SubClassOf: 
        GridTest:Grid,
        GridTest:hasValue exactly 1 xsd:int


Class: GridTest:Colum

    SubClassOf: 
        GridTest:Grid,
        GridTest:hasCell exactly 4 GridTest:Cell


Class: GridTest:Grid

    SubClassOf: 
        GridTest:hasColum exactly 4 GridTest:Colum


Individual: GridTest:cell1

    Facts:  
     GridTest:isCellOf  GridTest:col,
     GridTest:hasValue  1


Individual: GridTest:cell2

    Facts:  
     GridTest:isCellOf  GridTest:col


Individual: GridTest:cell3

    Facts:  
     GridTest:isCellOf  GridTest:col


Individual: GridTest:cell4

    Facts:  
     GridTest:isCellOf  GridTest:col


Individual: GridTest:col

    Facts:  
     GridTest:isColumOf  GridTest:grid


Individual: GridTest:grid

РЕДАКТИРОВАТЬ: суть в том, что когда я запускаю мышку, значения для некоторых ячеек, он будет выводить значения других ячеек. Например: ячейка1 = 1, ячейка2 =2, ячейка3 = 3 => рассуждатель сделает вывод, что значение ячейки 4 равно 4.

2 ответа

Решение

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

Используя это мышление, все может сводиться к логическим выражениям в аксионах.

Имея класс Value, свойство данных, которое добавляет значение индивидууму, и индивиды, представляющие значение с соответствующим свойством Data, можно просто сказать, что объект Cell (hasvalue value 1) or (hasValue value 2) ... а также hasvalue exactly 1 value

Ну, попробуйте это:

Prefix: : <http://www.example.org/semaphore#>
Prefix: owl: <http://www.w3.org/2002/07/owl#>
Prefix: xsd: <http://www.w3.org/2001/XMLSchema#>

Ontology: <http://www.example.org/semaphore>

Datatype: xsd:string

Class: Semaphore
    SubClassOf: 
        hasSignal exactly 3 Signal

ObjectProperty: hasSignal

Class: Signal
    EquivalentTo: 
      {greenSignal , redSignal , yellowSignal},
      hasColor exactly 1 Color
    DisjointUnionOf:
        hasColorName value "red"^^xsd:string,
        hasColorName value "yellow"^^xsd:string,
        hasColorName value "green"^^xsd:string
    HasKey: 
        hasColorName

ObjectProperty: hasColor
    Characteristics: 
        Functional,
        InverseFunctional

Class: Color
    EquivalentTo: 
        {greenColor , redColor , yellowColor}

DataProperty: hasColorName
    Characteristics: 
        Functional

Individual: semaphore
    Types: 
        Semaphore

Individual: redSignal
    Facts:  
     hasColor  redColor,
     hasColorName  "red"^^xsd:string
Individual: yellowSignal
    Facts:  
     hasColor  yellowColor,
     hasColorName  "yellow"^^xsd:string 
Individual: greenSignal


Individual: redColor
Individual: yellowColor
Individual: greenColor

DifferentIndividuals: 
    semaphore,
    redSignal,yellowSignal,greenSignal,
    redColor,yellowColor,greenColor

Это адаптируется к вашим потребностям? Это работает с Пеллет, а не с Отшельником.

введите описание изображения здесь

Другие вопросы по тегам