Exemplo n.º 1
0
    def checkmatchforOWLtermandnodename(self, OWL_term_1, OWL_term_2):
        # it should not be a complement of a class; i.e. the raw term should start with <
        if (OWL_term_1 is None) or (OWL_term_2 is None):
            return False

        if str(type(OWL_term_1)) == '<class \'list\'>':
            for t1 in OWL_term_1:
                if str(type(OWL_term_2)) == '<class \'list\'>':
                    for t2 in OWL_term_2:
                        if (t1[0] == '<') and (t2[0] == '<'):
                            if t1 == t2:
                                return True
                else:
                    if (t1[0] == '<') and (t2[0] == '<'):
                        if t1 == t2:
                            return True

        if (OWL_term_1[0] == '<') and (OWL_term_2[0] == '<'):
            if OWL_term_1 == OWL_term_2:
                return True

        top_and_bottom_entities = []
        top_and_bottom_entities.extend(
            Special.return_group(Special.AllTopEntities))
        top_and_bottom_entities.extend(
            Special.return_group(Special.AllBottomEntities))

        if (OWL_term_1 in top_and_bottom_entities) and (OWL_term_1
                                                        == OWL_term_2):
            return True

        return False
Exemplo n.º 2
0
    def run(self, path):
        """
        Perform PDF document generation.
        :type path: str
        """
        printer = QtPrintSupport.QPrinter(QtPrintSupport.QPrinter.HighResolution)
        printer.setOutputFormat(QtPrintSupport.QPrinter.PdfFormat)
        printer.setOutputFileName(path)
        printer.setOrientation(QtPrintSupport.QPrinter.Landscape)
        printer.setPrinterName(self.project.name)
        painter = QtGui.QPainter()

        # DIAGRAM SELECTION
        if self.diagrams is None:
            dialog = DiagramSelectionDialog(self.session)
            if not dialog.exec_():
                return
            self.diagrams = dialog.selectedDiagrams()
        # DIAGRAM PAGE SIZE SELECTION
        if self.pageSize is None:
            dialog = PageSetupDialog(printer, self.session)
            if not dialog.exec_():
                return
        else:
            printer.setPageSize(self.pageSize)

        ##############################################################
        # DIAGRAMS
        ##############################################################

        for n, diagram in enumerate(natsorted(self.diagrams, key=lambda diagram: diagram.name)):
            shape = diagram.visibleRect(margin=400)
            if shape:
                if n > 0:
                    printer.newPage()
                if painter.isActive() or painter.begin(printer):
                    # TURN CACHING OFF
                    for item in diagram.items():
                        if item.isNode() or item.isEdge():
                            item.setCacheMode(AbstractItem.NoCache)
                    # RENDER THE DIAGRAM
                    diagram.render(painter, source=shape)
                    # RENDER DIAGRAM NAME
                    title = QtGui.QTextDocument()
                    title.setDefaultFont(Font(pixelSize=140))
                    title.setHtml('{0}<hr width=100%/>'.format(diagram.name))
                    title.setTextWidth(printer.pageRect().width())
                    title.drawContents(painter)
                    # TURN CACHING ON
                    for item in diagram.items():
                        if item.isNode() or item.isEdge():
                            item.setCacheMode(AbstractItem.DeviceCoordinateCache)

        ##############################################################
        # IRI TABLE
        ##############################################################

        # RESET PAGE SIZE AND ORIENTATION FOR PREDICATE TABLES
        printer.setPageSize(QtPrintSupport.QPrinter.A4)
        printer.setOrientation(QtPrintSupport.QPrinter.Landscape)
        printer.setPageMargins(12.5, 12.5, 12.5, 12.5, QtPrintSupport.QPrinter.Millimeter)

        prefixRows = []
        for iri in sorted(self.project.IRI_prefixes_nodes_dict.keys()):
            for prefix in self.project.IRI_prefixes_nodes_dict[iri][0]:
                prefixRows.append(dedent('''
                    <tr>
                        <td width=25%>{0}</td>
                        <td width=75%>{1}</td>
                    </tr>
                '''.format(prefix, iri)))
        sections = [prefixRows[i:i+self.rowsPerPage] for i in range(0, len(prefixRows), self.rowsPerPage)]

        for section in sections:
            if len(section) > 0:
                if len(self.diagrams) > 0:
                    printer.newPage()
                doc = QtGui.QTextDocument()
                htmlTable = '''
                <table width=100% border=5 cellspacing=0 cellpadding=60>
                    <thead>
                        <tr>
                            <th bgcolor=#c8c8c8>PREFIX</th>
                            <th bgcolor=#c8c8c8>IRI</th>
                        </tr>
                    </thead>
                 <tbody>'''
                htmlTable += '\n'.join(section)
                htmlTable += '</tbody>'
                htmlTable += '</table>'
                doc.setDefaultFont(Font(pixelSize=180))
                doc.setHtml(htmlTable)
                doc.setPageSize(QtCore.QSizeF(printer.pageRect().size()))
                doc.drawContents(painter)

        ##############################################################
        # ROLES AND ATTRIBUTES TABLE
        ##############################################################

        predicateRows = []
        predicates = set()
        for item in {Item.RoleNode, Item.AttributeNode}:
            for predicate in self.project.predicates(item=item):
                if not predicate.text() in Special.return_group(Special.AllTopEntities) \
                        or predicate.text() in Special.return_group(Special.AllBottomEntities):
                    predicates.add(predicate.text().replace('\n', ''))

        for predicate in sorted(predicates):
            meta = self.project.meta(Item.RoleNode, predicate) or \
                   self.project.meta(Item.AttributeNode, predicate) or \
                   {}
            attributes = [
                meta.get(K_FUNCTIONAL, False),
                meta.get(K_INVERSE_FUNCTIONAL, False),
                meta.get(K_REFLEXIVE, False),
                meta.get(K_IRREFLEXIVE, False),
                meta.get(K_SYMMETRIC, False),
                meta.get(K_ASYMMETRIC, False),
                meta.get(K_TRANSITIVE, False),
            ]
            predicateRows.append('''
                <tr>
                    <td width=30%>{0}</td>
                    <td width=10%><center>{1}</center></td>
                    <td width=10%><center>{2}</center></td>
                    <td width=10%><center>{3}</center></td>
                    <td width=10%><center>{4}</center></td>
                    <td width=10%><center>{5}</center></td>
                    <td width=10%><center>{6}</center></td>
                    <td width=10%><center>{7}</center></td>
                </tr>
            '''.format(predicate, *map(lambda x: u'\u2713' if x else '', attributes)))
        sections = [predicateRows[i:i+self.rowsPerPage] for i in range(0, len(predicateRows), self.rowsPerPage)]

        for section in sections:
            if len(section) > 0:
                if len(self.diagrams) > 0:
                    printer.newPage()
                doc = QtGui.QTextDocument()
                htmlTable = '''
                <table width=100% border=5 cellspacing=0 cellpadding=60>
                    <thead>
                        <tr>
                            <th bgcolor=#c8c8c8>ENTITY</th>
                            <th bgcolor=#c8c8c8>FUNCT</th>
                            <th bgcolor=#c8c8c8>INVERSE FUNCT</th>
                            <th bgcolor=#c8c8c8>TRANS</th>
                            <th bgcolor=#c8c8c8>REFL</th>
                            <th bgcolor=#c8c8c8>IRREFL</th>
                            <th bgcolor=#c8c8c8>SYMM</th>
                            <th bgcolor=#c8c8c8>ASYMM</th>
                        </tr>
                    </thead>
                 <tbody>'''
                htmlTable += '\n'.join(section)
                htmlTable += '</tbody>'
                htmlTable += '</table>'
                doc.setDefaultFont(Font(pixelSize=180))
                doc.setHtml(htmlTable)
                doc.setPageSize(QtCore.QSizeF(printer.pageRect().size()))
                doc.drawContents(painter)

        # COMPLETE THE EXPORT
        if painter.isActive():
            painter.end()

        # OPEN THE DOCUMENT
        if self.open:
            openPath(printer.outputFileName())
Exemplo n.º 3
0
    def FillTableWithMetaDataInfoForRolesAndAttributes(self):

        self.table_2.setRowCount(1)
        self.table_2.setColumnCount(8)

        header_entity = QtWidgets.QTableWidgetItem()
        header_entity.setText('ENTITY')
        header_entity.setFont(Font('Roboto', 15, bold=True))
        header_entity.setTextAlignment(QtCore.Qt.AlignCenter)
        header_entity.setBackground(
            QtGui.QBrush(QtGui.QColor(255, 255, 255, 255)))
        header_entity.setForeground(QtGui.QBrush(QtGui.QColor(90, 80, 80,
                                                              200)))
        header_entity.setFlags(QtCore.Qt.NoItemFlags)

        header_functional = QtWidgets.QTableWidgetItem()
        header_functional.setText('FUNCT')
        header_functional.setFont(Font('Roboto', 15, bold=True))
        header_functional.setTextAlignment(QtCore.Qt.AlignCenter)
        header_functional.setBackground(
            QtGui.QBrush(QtGui.QColor(255, 255, 255, 255)))
        header_functional.setForeground(
            QtGui.QBrush(QtGui.QColor(90, 80, 80, 200)))
        header_functional.setFlags(QtCore.Qt.NoItemFlags)

        header_inversefunctional = QtWidgets.QTableWidgetItem()
        header_inversefunctional.setText('INV\nFUNCT')
        header_inversefunctional.setFont(Font('Roboto', 15, bold=True))
        header_inversefunctional.setTextAlignment(QtCore.Qt.AlignCenter)
        header_inversefunctional.setBackground(
            QtGui.QBrush(QtGui.QColor(255, 255, 255, 255)))
        header_inversefunctional.setForeground(
            QtGui.QBrush(QtGui.QColor(90, 80, 80, 200)))
        header_inversefunctional.setFlags(QtCore.Qt.NoItemFlags)

        header_transitive = QtWidgets.QTableWidgetItem()
        header_transitive.setText('TRANS')
        header_transitive.setFont(Font('Roboto', 15, bold=True))
        header_transitive.setTextAlignment(QtCore.Qt.AlignCenter)
        header_transitive.setBackground(
            QtGui.QBrush(QtGui.QColor(255, 255, 255, 255)))
        header_transitive.setForeground(
            QtGui.QBrush(QtGui.QColor(90, 80, 80, 200)))
        header_transitive.setFlags(QtCore.Qt.NoItemFlags)

        header_reflexive = QtWidgets.QTableWidgetItem()
        header_reflexive.setText('REFL')
        header_reflexive.setFont(Font('Roboto', 15, bold=True))
        header_reflexive.setTextAlignment(QtCore.Qt.AlignCenter)
        header_reflexive.setBackground(
            QtGui.QBrush(QtGui.QColor(255, 255, 255, 255)))
        header_reflexive.setForeground(
            QtGui.QBrush(QtGui.QColor(90, 80, 80, 200)))
        header_reflexive.setFlags(QtCore.Qt.NoItemFlags)

        header_irreflexive = QtWidgets.QTableWidgetItem()
        header_irreflexive.setText('IRREFL')
        header_irreflexive.setFont(Font('Roboto', 15, bold=True))
        header_irreflexive.setTextAlignment(QtCore.Qt.AlignCenter)
        header_irreflexive.setBackground(
            QtGui.QBrush(QtGui.QColor(255, 255, 255, 255)))
        header_irreflexive.setForeground(
            QtGui.QBrush(QtGui.QColor(90, 80, 80, 200)))
        header_irreflexive.setFlags(QtCore.Qt.NoItemFlags)

        header_symmetric = QtWidgets.QTableWidgetItem()
        header_symmetric.setText('SYMM')
        header_symmetric.setFont(Font('Roboto', 15, bold=True))
        header_symmetric.setTextAlignment(QtCore.Qt.AlignCenter)
        header_symmetric.setBackground(
            QtGui.QBrush(QtGui.QColor(255, 255, 255, 255)))
        header_symmetric.setForeground(
            QtGui.QBrush(QtGui.QColor(90, 80, 80, 200)))
        header_symmetric.setFlags(QtCore.Qt.NoItemFlags)

        header_asymmetric = QtWidgets.QTableWidgetItem()
        header_asymmetric.setText('ASYMM')
        header_asymmetric.setFont(Font('Roboto', 15, bold=True))
        header_asymmetric.setTextAlignment(QtCore.Qt.AlignCenter)
        header_asymmetric.setBackground(
            QtGui.QBrush(QtGui.QColor(255, 255, 255, 255)))
        header_asymmetric.setForeground(
            QtGui.QBrush(QtGui.QColor(90, 80, 80, 200)))
        header_asymmetric.setFlags(QtCore.Qt.NoItemFlags)

        self.table_2.setItem(self.table_2.rowCount() - 1, 0, header_entity)
        self.table_2.setItem(self.table_2.rowCount() - 1, 1, header_functional)
        self.table_2.setItem(self.table_2.rowCount() - 1, 2,
                             header_inversefunctional)
        self.table_2.setItem(self.table_2.rowCount() - 1, 3, header_reflexive)
        self.table_2.setItem(self.table_2.rowCount() - 1, 4,
                             header_irreflexive)
        self.table_2.setItem(self.table_2.rowCount() - 1, 5, header_symmetric)
        self.table_2.setItem(self.table_2.rowCount() - 1, 6, header_asymmetric)
        self.table_2.setItem(self.table_2.rowCount() - 1, 7, header_transitive)

        self.table_2.setRowCount(self.table_2.rowCount() + 1)

        wanted_attributes = [
            'functional', 'inverseFunctional', 'reflexive', 'irreflexive',
            'symmetric', 'asymmetric', 'transitive'
        ]

        attribute_predicates_filtered = set()
        for attribute_predicate in self.project.predicates(
                item=Item.AttributeNode):
            if (attribute_predicate.text() in Special.return_group(
                    Special.AllTopEntities)) or (
                        attribute_predicate.text() in Special.return_group(
                            Special.AllBottomEntities)):
                continue
            else:
                attribute_predicates_filtered.add(attribute_predicate.text())

        #print('len(attribute_predicates_filtered)',len(attribute_predicates_filtered))

        for attribute_predicate_txt in sorted(attribute_predicates_filtered):
            meta_data = self.project.meta(Item.AttributeNode,
                                          attribute_predicate_txt)

            #print('meta_data',meta_data)

            attributes = []

            if len(meta_data) > 0:
                for k in wanted_attributes:
                    if k in meta_data:
                        value = meta_data[k]
                    else:
                        value = False
                    attributes.append(value)
            else:
                attributes.append(False)
                attributes.append(False)
                attributes.append(False)
                attributes.append(False)
                attributes.append(False)
                attributes.append(False)
                attributes.append(False)

            #print(attribute_predicate_txt, '-', attributes)

            attribute_predicate_plus_attributes = []

            attribute_predicate_plus_attributes.append(attribute_predicate_txt)
            attribute_predicate_plus_attributes.extend(attributes)

            self.append_row_and_column_to_table_2(
                attribute_predicate_plus_attributes, entity='attribute')

        role_predicates_filtered = set()
        for role_predicate in self.project.predicates(item=Item.RoleNode):
            if (role_predicate.text() in Special.return_group(
                    Special.AllTopEntities)) or (
                        role_predicate.text() in Special.return_group(
                            Special.AllBottomEntities)):
                continue
            else:
                role_predicates_filtered.add(role_predicate.text())

        #print('len(role_predicates_filtered)', len(role_predicates_filtered))

        for role_predicate_txt in sorted(role_predicates_filtered):
            meta_data = self.project.meta(Item.RoleNode, role_predicate_txt)

            attributes = []

            if len(meta_data) > 0:
                for k in wanted_attributes:
                    value = meta_data[k]
                    attributes.append(value)
            else:
                attributes.append(False)
                attributes.append(False)
                attributes.append(False)
                attributes.append(False)
                attributes.append(False)
                attributes.append(False)
                attributes.append(False)

            #print(role_predicate_txt,'-',attributes)

            role_predicate_plus_attributes = []

            role_predicate_plus_attributes.append(role_predicate_txt)
            role_predicate_plus_attributes.extend(attributes)

            self.append_row_and_column_to_table_2(
                role_predicate_plus_attributes)

        self.table_2.setRowCount(self.table_2.rowCount() - 1)