def createSection(self, entityList, id, title, summary='', priority=1): if entityList and not summary: section = sectionModel.Section(id, title, sectionSummary=self.sectionSummary( entityList[0].type), priority=priority) else: section = sectionModel.Section(id, title, sectionSummary=summary, priority=priority) for entity in entityList: diagrams = [] for diagram in entity.diagrams: caption = self.informationRetriever.getRelations( diagram, self.baseUri + 'Caption') if caption: caption = caption[0][1] diagrams.append({'uri': diagram, 'caption': caption}) entitySection = sectionModel.Section( explanationHelper.getNameFromUri(entity.uri), explanationHelper.getNameOfEntity(entity), entityType=explanationHelper.getNameFromUri(entity.type), sectionSummary='', sectionTextContent=[ (explanationHelper.getNameFromUri(content[0]), content[1]) for content in entity.dataTypeProperties ], sectionDiagrams=diagrams) section.addChild(entitySection.toDict()) return section
def getTypeOptionDiv(): entityType = request.form.get('entityType', '') if (entityType): entityType = json.loads(entityType) for eo in entityType['entityOptions']: eo['uri'] = explanationHelper.getNameFromUri(eo['uri']) eo['type'] = explanationHelper.getNameFromUri( queryManager.getTypeOfIndividual(baseUri + eo['uri'])) return render_template('typeOptionDiv.html', type=entityType) return ''
def __repr__(self): output = "{{entities: [{entities}], relations: [{relations}]}}" entitiesStr = "" relationsStr = "" entitiesEnd = len(self.entities) - 1 relationsEnd = len(self.relations) - 1 for index, entity in enumerate(self.entities): if index < entitiesEnd: entitiesStr += explanationHelper.getNameFromUri( entity.uri) + ', ' else: entitiesStr += explanationHelper.getNameFromUri(entity.uri) for index, relation in enumerate(self.relations): if index < relationsEnd: relationsStr += '(' + explanationHelper.getNameFromUri( relation.name) + ', ' + explanationHelper.getNameFromUri( relation.source ) + ', ' + explanationHelper.getNameFromUri( relation.target) + ')' + ', ' else: relationsStr += '(' + explanationHelper.getNameFromUri( relation.name) + ', ' + explanationHelper.getNameFromUri( relation.source ) + ', ' + explanationHelper.getNameFromUri( relation.target) + ')' return output.format(entities=entitiesStr, relations=relationsStr)
def generateGeneralSummary(self, structure, summaryText): question = self.getQuestion(summaryText) expTemplate = sectionModel.Template(question, summaryText) if (not structure.entities): return sectionModel.Template( question, '<font style="color:red;font-weight:bold;font-size:20">No documented data on the architectural patterns in this view was found.</font>' ) types = {} for entity in structure.entities: eUri = explanationHelper.getNameFromUri(entity.type) if (not eUri in types.keys()): types[eUri] = [] types[eUri].append(entity) for entityType, entities in types.items(): expTemplate.addSection( self.createSection( entities, entityType + '_section', self.pluralEngine.plural( explanationHelper.formatName(entityType), 3)).toDict()) return expTemplate
def getEntityFont(self, entityUri): words = [ word.lower() for word in re.findall( '[A-Z][^A-Z]*', explanationHelper.getNameFromUri(entityUri)) ] entityFont = '-'.join(words) + '-font' return entityFont
def classesToText(self, entities): def addEntityType(entity, entityType, entityTypes): if entityType not in list(entityTypes.keys()): entityTypes[entityType] = [] entityTypes[entityType].append(entity) entityTypes = {} for entity in entities: entityType = explanationHelper.getNameFromUri(entity.type) if entityType and not 'dummy' in entityType: addEntityType(entity, entityType, entityTypes) text = '' for index, entityType in enumerate(entityTypes): size = str(len(entityTypes[entityType])) text += self.styledName( size + ' ' + self.pluralEngine.plural( explanationHelper.formatName(entityType), size), 'class-font', self.baseUri + entityType) if index < len(entityTypes) - 2: text += ', ' elif index == len(entityTypes) - 2: text += ' and ' return text
def getManualExplanation(self, types, relations): es = ontologyStructureModel.EntityStructure() entitiesToBeFiltered = [] for entityType in types: if entityType['option'] == 'all': entities = self.ir.getIndividualsByType(entityType['uri']) for entityUri in entities: es.addEntity(entityUri) elif entityType['option'] == 'only_related': entities = self.ir.getIndividualsByType(entityType['uri']) for entityUri in entities: entitiesToBeFiltered.append(entityUri) es.addEntity(entityUri) elif entityType['option'] == 'specific': es.addEntity(entityType['entityUri']) for relation in relations: entityRelations = self.ir.getRelationsByType(relation['source'], relation['name'], relation['target']) for entityRelation in entityRelations: es.addRelation(explanationHelper.getNameFromUri(entityRelation['name']), entityRelation['source'], entityRelation['target']) entitiesWithRelations = list(set([rel.source for rel in es.relations] + [rel.target for rel in es.relations])) for e in entitiesToBeFiltered: if e not in entitiesWithRelations: es.removeEntity(e) return es
def constructMetaModel(self): allObjectsAndRelations = self.ir.getAllObjectsAndRelations() es = ontologyStructureModel.EntityStructure() entityToUriMap = {} for item in allObjectsAndRelations: e1 = ontologyStructureModel.Entity(item[0]) e2 = ontologyStructureModel.Entity(item[2]) es.addEntity(e1) es.addEntity(e2) entityToUriMap[explanationHelper.getNameFromUri(item[0])] = e1 entityToUriMap[explanationHelper.getNameFromUri(item[2])] = e2 es.addRelation(item[1], item[0], item[2]) duplicates = {} for item in es.entities: if not explanationHelper.getNameFromUri(item.uri) in list(duplicates.keys()): duplicates[explanationHelper.getNameFromUri(item.uri)] = 1 else: print('We got a duplicate key!') break print(duplicates) types = set() for item in es.entities: types.add(item.type) types = list(types) print('Types:') print(types) def getEntityType(entityUri): return entityToUriMap[explanationHelper.getNameFromUri(entityUri)].type typeRelations = [] for item in es.relations: typeRelations.append({'name': item.name, 'source': getEntityType(item.source), 'target': getEntityType(item.target)}) typeRelations = [dict(s) for s in set(frozenset(d.items()) for d in typeRelations)] print('Type relations:') print(typeRelations) typesAndRelations = {'types': types, 'relations': typeRelations} with open('C:/Users/SAMSUNG/Documents/ThesisProject/MasterThesisCode/Master-Thesis---OD3/Presentation/FlaskServer/static/ontologyRelations.js', 'w') as f: f.write(json.dumps(typesAndRelations))
def addRecursiveEntitiesAndRelations(self, entityStructure, subjectUri, predicateUri, objectTypeUri='', callback=None): for o in self.ir.getRelations(subjectUri, predicateUri, objectTypeUri): entityStructure.addEntity(o[1]) entityStructure.addRelation(explanationHelper.getNameFromUri(predicateUri), subjectUri, o[1]) self.addRecursiveEntitiesAndRelations(entityStructure, o[1], predicateUri, objectTypeUri, callback) if callback: callback(entityStructure, o[1]) return entityStructure
def sectionSummary(self, typeUri): name = self.styledName(self.pluralEngine.plural( explanationHelper.formatName( explanationHelper.getNameFromUri(typeUri)), 2), 'class-font', entityType=typeUri) summary = 'This section lists the {name} and their descriptions' summary = summary.format(name=name) return summary
def generatePopupFigureDescription(self, figureUri): figureEntity = ontologyStructureModel.Entity(figureUri) template = explanationHelper.openText( 'static/explanationTemplates/FigureSummary.txt') relatedEntityUris = [ ontologyStructureModel.Entity(entity[1]) for entity in self.informationRetriever.getRelations( figureUri, self.baseUri + 'models') ] summary = template.format( classes=self.classesToText(relatedEntityUris)) question = {'sub': 'View diagrams', 'orginial': ''} figureid = 'popup_' + explanationHelper.diagramUriToFileName( explanationHelper.getNameFromUri(figureUri)) figuretitle = explanationHelper.getNameOfEntity(figureEntity) figureSummary = '' entityid = 'popup_entity_overview_' + explanationHelper.diagramUriToFileName( explanationHelper.getNameFromUri(figureUri)) entitySummary = '' relatedEntities = relatedEntityUris figureSection = sectionModel.Section( figureid, figuretitle, figureSummary, priority=5, sectionTextContent=[ (explanationHelper.getNameFromUri(content[0]), content[1]) for content in figureEntity.dataTypeProperties ]) entitySection = self.createSection(relatedEntities, entityid, 'Entities related to diagram', entitySummary) template = sectionModel.Template(question, summary) template.addSection(figureSection.toDict()) template.addSection(entitySection.toDict()) return template
def getDirectSuperClassParentMap(): classes = request.form.getlist('types[]') if classes: parentMap = {} for c in classes: parent = queryManager.getDirectSuperClass(c) parentMap[explanationHelper.getNameFromUri(c)] = { 'child': c, 'parent': parent } return json.dumps(parentMap) return ''
def styledName(self, text, fontType='', entityType=''): if entityType: entitySupertypes = self.informationRetriever.getSuperClasses( entityType) else: entitySupertypes = self.informationRetriever.getSuperClasses(text) eType = entityType if entitySupertypes: if self.baseUri + 'DevelopmentStructure' in entitySupertypes: eType = 'DevelopmentStructure' elif self.baseUri + 'DevelopmentBehavior' in entitySupertypes: eType = 'DevelopmentBehavior' elif self.baseUri + 'LogicalStructure' in entitySupertypes: eType = 'LogicalStructure' elif self.baseUri + 'LogicalBehavior' in entitySupertypes: eType = 'LogicalBehavior' elif self.baseUri + 'UIStructure' in entitySupertypes: eType = 'UIStructure' elif self.baseUri + 'UIBehavior' in entitySupertypes: eType = 'UIBehavior' elif self.baseUri + 'PhysicalStructure' in entitySupertypes: eType = 'PhysicalStructure' name = '<span class="{fontType} {entityFontName}">{textName}</span>' if entityType: name = name.format(fontType=fontType, entityFontName=self.getEntityFont(eType), textName=text) else: name = name.format(fontType=fontType, entityFontName=self.getEntityFont(text), textName=explanationHelper.getNameFromUri(text)) return name
def getOverviewDiagrams(self, structure, overviewGroup): logical = [ l.uri for l in list( filter(lambda e: self.baseUri + overviewGroup in e.supertypes, structure.entities)) ] diagrams = [ d[1] for d in self.informationRetriever.getRelations( sub=logical[0], objType=self.baseUri + 'Diagram') ] overviewDiagrams = {} for diagram in diagrams: fullDiagramRelations = self.informationRetriever.getRelations( sub=diagram) diagramRelations = [dr[1] for dr in fullDiagramRelations] if set(logical) < set(diagramRelations): overviewDiagramDescription = [ description[1] for description in fullDiagramRelations if '#Description' in description[0] ][0] overviewDiagramCaption = [ caption[1] for caption in fullDiagramRelations if '#Caption' in caption[0] ][0] overviewDiagrams[diagram] = { 'name': explanationHelper.formatDiagramName( explanationHelper.getNameFromUri(diagram)), 'description': overviewDiagramDescription, 'caption': overviewDiagramCaption } return overviewDiagrams
def getEntityType(entityUri): return entityToUriMap[explanationHelper.getNameFromUri(entityUri)].type