2.3.2 Отношения
hasMotherboard
Функциональное
Субъект: Computer
Объект: Motherboard
Не пересекается с: hasMotherboardHardware
hasMotherboardHardware
Обратно-функциональное
Обратно к: isComponentOfMotherboard
Субъект: Motherboard
Объект: Motherboard Hardware
Не пересекается с: hasMotherboard
isComponentOfMotherboard
Функциональное
Обратно к: hasMotherboardHardware
Субъект: Motherboard
Объект: Motherboard Hardware
Не пересекается с: hasMotherboard
2.3.3 Свойства
has capacity
Функциональное
Тип: xsd:unsignedInt
has disk capacity
Является подсвойством: has capacity
Субъект: Disk Drive
has RAM capacity
Является подсвойством: has capacity
Субъект: RAM
2.3.4 Экземпляры
Disk Drive Individual2
Тип: Disk Drive
has disk capacity 128000
Hardware1
Тип: Hardware
hasMotherboardHardware Hardware2
Motherboard Individual0
Тип: Motherboard
hasMotherboardHardware Disk Drive Individual0
hasMotherboardHardware RAM Individual0
hasMotherboardHardware CPU Individual0
hasMotherboardHardware Power Supply Individual0
hasMotherboardHardware GPU Individual0
PC Individual0
Тип: PC
hasMotherboard Motherboard Individual0
RAM Individual0
Тип: RAM
has RAM capacity 4000
2.3.5 Условия
2GB RAM
RAM and ((has_capacity value 2000) or (has_capacity value 2048))
4GB RAM
RAM and ((has_capacity value 4000) or (has_capacity value 4096))
8GB RAM
RAM and ((has_capacity value 8000) or (has_capacity value 8192))
2.3.6 Swrl-правила
Если x – это компьютерное железо, содержащее железо y, предназначенное для материнской платы, то x – это материнская плата, а y – железо, предназначенное для материнской платы:
Hardware(?x) ^ hasMotherboardHardware(?x, ?y) -> Motherboard_Hardware(?y) ^ Motherboard(?x)
2.4 Результирующая онтология
Класс computer:Computer теперь является классом room:Компьютер.
Добавлено отношение «пребывает в», которое связывает класс studying:Human с классом room:Помещение.
Создан класс «Компьютерный стол с компьютером с дискретной видеокартой» как подкласс класса «Компьютерный стол» из онтологии «Помещения» и условие для этого класса:
Компьютерный_стол and (имеет_компьютер some
(Компьютер and (hasMotherboard some
(Motherboard and (hasMotherboardHardware some GPU)))))
Создано два SWRL-правила:
Если два студента пребывают в одной лаборатории, то эти студенты одногруппники (онтологии studying и room):
Student(?x) ^ Student(?y) ^ Лаборатория(?z) ^ пребывает_в(?x, ?z) ^ пребывает_в(?y, ?z) -> sameGroupAs(?x, ?y)
Аналогично первому правилу, но относительно объекта Group. Прошлое правило создаёт новые отношения между студентами, а текущее между студентами и группой, следовательно, нужна дополнительная проверка на существование отношения между x и группой w):
Student(?x) ^ Student(?y) ^ Лаборатория(?z) ^ пребывает_в(?x, ?z) ^ пребывает_в(?y, ?z) ^ Group(?w) ^ contains(?w, ?x) -> contains(?w, ?y)
Sparql-запросы
Перед запросом SELECT необходимо прописать следующие префиксы, позволяющие использовать все 4 онтологии и встроенные типы:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX owl: <http://www.w3.org/2002/07/owl#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> PREFIX this: <http://www.semanticweb.org/jerozgen/ontologies/2022/10/merged#> PREFIX studying: <http://www.semanticweb.org/milikovv/ontologies/2022/8/studying#> PREFIX computer: <http://www.semanticweb.org/jerozgen/ontologies/2022/8/computer#> PREFIX room: <http://www.semanticweb.org/jerozgen/ontologies/2022/10/room#>
Вывод всех людей, находящихся в заданном помещении (Лаборатория1):
SELECT ?x WHERE { ?x a ?y . ?y rdfs:subClassOf studying:Human . ?x this:пребывает_в this:Лаборатория1 }
Здесь x является объектом любого подкласса класса Human из онтологии Studying. Для определения, в каком помещении находится x, используется отношение «пребывает_в» из онтологии merged. Эта же онтология содержит объекты всех помещений. В данном примере в качестве объекта помещения взята «Лаборатория1».
Вывод количества оперативной памяти каждого компьютера в каждом помещении:
SELECT ?x ?c (sum(?f) as ?k) WHERE { ?x a ?a . ?a rdfs:subClassOf room:Помещение . ?b room:находится_в ?x . ?b room:имеет_компьютер ?c . ?c computer:hasMotherboard ?d . ?d computer:hasMotherboardHardware ?e . ?e computer:has_RAM_capacity ?f . } GROUP BY ?x ?c
Здесь x — экземпляр любого подкласса класса помещения из онтологии room, c – объект класса «Компьютер», k — количество памяти в компьютере c, b — рабочее место, d — материнская плата компьютера c, e – железо, находящееся на материнской плате d, e – количество памяти в одном объекте RAM. Запрос сначала находит количество памяти в каждом объекте RAM, существующем в базе знаний, а затем суммирует и группирует значения для каждого компьютера.
