@@ -60,17 +60,7 @@ object Main extends ZCaseApp[Config] {
6060 effectBlockingIO(redundantRDFWriter.triple(Triple .create(NodeFactory .createBlankNode(" redundant" ), RDFType , OWLOntology ))))
6161 .when(config.mode == OWLMode )
6262 start <- ZIO .effectTotal(System .currentTimeMillis())
63- classes = classHierarchy(whelk)
64- properties = propertyHierarchy(ontology)
65- classesStream = allClasses(ontology)
66- classesTasks = classesStream.map(c => ZIO .effectTotal(processSuperclasses(c, whelk, config)))
67- queue <- Queue .unbounded[Restriction ]
68- activeRestrictions <- Ref .make(0 )
69- seenRef <- Ref .make(Map .empty[AtomicConcept , Set [AtomicConcept ]])
70- _ <- traverse(specifiedProperties, properties, classes, queue, activeRestrictions, seenRef)
71- restrictionsStream = Stream .fromQueue(queue).map(r => processRestrictionAndExtendQueue(r, properties, classes, whelk, config.mode, specifiedProperties.isEmpty, queue, activeRestrictions, seenRef))
72- allTasks = classesTasks ++ restrictionsStream
73- processed = allTasks.mapMParUnordered(JRuntime .getRuntime.availableProcessors)(identity)
63+ processed <- computeRelations(ontology, whelk, specifiedProperties, config.reflexiveSubclasses.bool, config.equivalenceAsSubclass.bool, config.mode)
7464 _ <- processed.foreach {
7565 case TriplesGroup (nonredundant, redundant) =>
7666 ZIO .effect {
@@ -85,6 +75,21 @@ object Main extends ZCaseApp[Config] {
8575 program.exitCode
8676 }
8777
78+ def computeRelations (ontology : OWLOntology , whelk : ReasonerState , specifiedProperties : Set [AtomicConcept ], reflexiveSubclasses : Boolean , equivalenceAsSubclass : Boolean , mode : Config .OutputMode ): UIO [UStream [TriplesGroup ]] = {
79+ val classes = classHierarchy(whelk)
80+ val properties = propertyHierarchy(ontology)
81+ val classesStream = allClasses(ontology)
82+ val classesTasks = classesStream.map(c => ZIO .effectTotal(processSuperclasses(c, whelk, reflexiveSubclasses, equivalenceAsSubclass)))
83+ for {
84+ queue <- Queue .unbounded[Restriction ]
85+ activeRestrictions <- Ref .make(0 )
86+ seenRef <- Ref .make(Map .empty[AtomicConcept , Set [AtomicConcept ]])
87+ _ <- traverse(specifiedProperties, properties, classes, queue, activeRestrictions, seenRef)
88+ restrictionsStream = Stream .fromQueue(queue).map(r => processRestrictionAndExtendQueue(r, properties, classes, whelk, mode, specifiedProperties.isEmpty, queue, activeRestrictions, seenRef))
89+ allTasks = classesTasks ++ restrictionsStream
90+ } yield allTasks.mapMParUnordered(JRuntime .getRuntime.availableProcessors)(identity)
91+ }
92+
8893 def readPropertiesFile (file : String ): ZIO [Blocking , Throwable , Set [AtomicConcept ]] =
8994 effectBlocking(Source .fromFile(file, " utf-8" )).bracketAuto { source =>
9095 effectBlocking(source.getLines().map(_.trim).filter(_.nonEmpty).map(line => AtomicConcept (line)).to(Set ))
@@ -203,23 +208,23 @@ object Main extends ZCaseApp[Config] {
203208 classHierarchy(whelk)
204209 }
205210
206- def processSuperclasses (cls : OWLClass , whelk : ReasonerState , config : Config ): TriplesGroup = {
211+ def processSuperclasses (cls : OWLClass , whelk : ReasonerState , reflexiveSubclasses : Boolean , equivalenceAsSubclass : Boolean ): TriplesGroup = {
207212 val subject = NodeFactory .createURI(cls.getIRI.toString)
208213 val concept = AtomicConcept (cls.getIRI.toString)
209214 val allSuperclasses = (whelk.closureSubsBySubclass.getOrElse(concept, Set .empty) - BuiltIn .Top )
210215 .collect { case ac @ AtomicConcept (_) => ac }
211216 if (allSuperclasses(BuiltIn .Bottom )) TriplesGroup .empty // unsatisfiable
212217 else {
213218 val (equivs, directSuperclasses) = whelk.directlySubsumedBy(concept)
214- val adjustedEquivs = if (config. reflexiveSubclasses.bool ) equivs + concept else equivs - concept
219+ val adjustedEquivs = if (reflexiveSubclasses) equivs + concept else equivs - concept
215220 val directSuperclassTriples = directSuperclasses.map(c => Triple .create(subject, RDFSSubClassOf , NodeFactory .createURI(c.id)))
216- val equivalentClassTriples = if (config. equivalenceAsSubclass.bool )
221+ val equivalentClassTriples = if (equivalenceAsSubclass)
217222 adjustedEquivs.map(c => Triple .create(subject, RDFSSubClassOf , NodeFactory .createURI(c.id)))
218223 else
219224 adjustedEquivs.map(c => Triple .create(subject, OWLEquivalentClass , NodeFactory .createURI(c.id)))
220225 val nonredundantTriples = directSuperclassTriples ++ equivalentClassTriples
221- val adjustedSuperclasses = if (config. reflexiveSubclasses.bool ) allSuperclasses + concept else allSuperclasses - concept
222- val redundantTriples = if (config. equivalenceAsSubclass.bool )
226+ val adjustedSuperclasses = if (reflexiveSubclasses) allSuperclasses + concept else allSuperclasses - concept
227+ val redundantTriples = if (equivalenceAsSubclass)
223228 adjustedSuperclasses.map(c => Triple .create(subject, RDFSSubClassOf , NodeFactory .createURI(c.id)))
224229 else {
225230 val superclassesMinusEquiv = adjustedSuperclasses -- adjustedEquivs
0 commit comments