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
Это адаптируется к вашим потребностям? Это работает с Пеллет, а не с Отшельником.