TableSchema - Схема таблицы
==================================

.. currentmodule:: axioma.core.dp

.. class:: TableSchema

	Схема таблицы

		.. method:: TableSchema()

			Конструктор по умолчанию, создает пустую схему

		.. method:: TableSchema(attr_list)

			Конструктор на основе списка атрибутов

			:param attr_list: список атрибутов
			:type attr_list: :class:`list` [:class:`~axioma.core.dp.AttributeDefinition`]

		.. method:: indexOf(name, c = Qt.CaseSensitive)

			Получить индекс атрибута с заданным именем

			:param name: имя атрибута
			:type name: :class:`str`
			:param c: Чувствительность к регистру. По умолчанию Qt.CaseSensitive
			:type c: :class:`Qt.CaseSensitivity`
			:rtype: :class:`int`

		.. method:: tryIndexOf(name)

			Получить индекс атрибута с заданным именем

			:param name: имя атрибута
			:type name: :class:`str`
			:rtype: :class:`int`

		.. method:: tryIndexOf(id)

			Получить индекс атрибута с заданным идентификатором

			:param id: идентификатор
			:return: индекс атрибута, либо -1
			:rtype: :class:`int`

		..	raises exeption
		.. method:: name(index)

			Получить имя атрибута с заданным индексом

			:param index: искомый индекс
			:type index: :class:`int`
			:rtype: :class:`str`

		.. method:: hasName(name)

			Имеет ли схема атрибут с именем name

			:param name: имя искомого атрибута
			:type name: :class:`str`
			:rtype: :class:`bool`

		.. method:: numAttributes()

			Количество атрибутов

			:rtype: :class:`int`

		.. method:: empty()

			Имеет ли схема атрибуты

			:rtype: :class:`bool`

		..	.. method:: bool()
		..
		..		!!!

		.. method:: at(index)

			Получить атрибут по индексу

			:param index: индекс
			:type index: :class:`int`
			:rtype: :class:`~axioma.core.dp.AttributeDefinition`

		.. method:: getByName(name, c = Qt.CaseSensitive)

			Получить атрибут по имени

			:param name: имя атрибута
			:type name: :class:`str`
			:param c: Чувствительность к регистру. По умолчанию Qt.CaseSensitive
			:type c: :class:`Qt.CaseSensitivity`
			:rtype: :class:`~axioma.core.dp.AttributeDefinition`

		..	.. staticmethod:: toAttributeList(table_schema)
		..
		..		!!!
		..
		..		:param : !!!
		..		:type : !!!
		..		:return: !!!
		..		:rtype: !!!

		.. method:: attributeNames()

			Список имен атрибутов

			:rtype: :class:`list` [:class:`str`]

		.. method:: tryIndexesOfNames(names)

			Возвращает массив, в котором i-й элемент соответствует позиции атрибута с именем names[i] в схеме

			:param names: список имен атрибутов
			:type names: :class:`list` [:class:`str`]
			:return: массив индексов
			:rtype: :class:`list` [:class:`int`]

		.. method:: allIndexesExcludingNames(names)

			Возвращает массив индексов всех атрибутов в схеме, кроме атрибутов с указанными именами names

			:param names: список имен атрибутов
			:type names: :class:`list` [:class:`str`]
			:return: массив индексов
			:rtype: :class:`list` [:class:`int`]

		.. method:: geometryIndex()

			Получить индекс атрибута с геометрией. Если несколько - возвращает первый \
			по списку. Если геометрических атрибутов не найдено, возвращает -1.

			:rtype: :class:`int`

		.. method:: geometryIndexes()

			Получить список индексов всех геометрических атрибутов

			:rtype: :class:`list` [:class:`int`]

		.. method:: styleIndex()

			Получить индекс атрибута со стилем. Если несколько - возвращает первый \
			по списку. Если стилей не найдено, возвращает -1.

			:rtype: :class:`int`

		.. method:: styleIndexes()

			Получить список индексов всех атрибутов со стилем

			:rtype: :class:`list` [:class:`int`]

		.. staticmethod:: emptyInstance()

			Возвращает ссылку на глобальный экземпляр пустой схемы

			:rtype: :class:`~axioma.core.dp.TableSchema`


ModifiedTableSchema - Модифицированная схема таблицы
========================================================

.. currentmodule:: axioma.core.dp

.. class:: ModifiedTableSchema

	Задаёт схему таблицы, получаемую из исходной схемы путём перестановки или замены атрибутов.

		.. method:: ModifiedTableSchema()

			Конструктор по умолчанию, создает пустую схему

		.. method:: ModifiedTableSchema(schema)

			Конструктор. Создаёт новую схему на основе исходной схемы без изменений.

			:param schema: Схема, на основании которой строится данный экземпляр
			:type schema: :class:`~axioma.core.dp.TableSchema`

		.. method:: ModifiedTableSchema(schema, requestedNames)

			Конструктор на основе списка атрибутов. Создаёт схему из атрибутов исходной схемы в том порядке, в котором их имена перечислены в списке requestedNames. 

			:param schema: Схема, на основании которой строится данный экземпляр
			:type schema: :class:`~axioma.core.dp.TableSchema`
			:param requestedNames: Список атрибутов. Имена несуществующих атрибутов и незатребованные атрибуты пропускаются.
			:type requestedNames: :class:`list` [:class:`str`]

		.. Получение обратного преобразования из новой схемы в исходную
		.. ModifiedTableSchema reverseModificationFrom(TableSchema originalSchema) const;

		.. method:: indexesInSource()

			Возвращает список, в котором каждому порядковому индексу для новой схемы присвоен номер, который занимал соответствующий атрибут в старой схеме, либо -1, если такого элемента не было в старой схеме

			:return: список индексов
			:rtype: :class:`list` [:class:`int`]

		.. method:: indexesInSource(columnIndex)

			Возвращает индекс, который занимал атрибут с индексом columnIndex в старой схеме, либо -1, если такого элемента не было в старой схеме

			:param columnIndex: Индекс в текущей схеме
			:type columnIndex: :class:`int`
			:return: Индекс в исходной схеме
			:rtype: :class:`list` [:class:`int`]

Пример создания пользовательской схемы:

  .. code-block:: python
  
    from axioma.core.dp import *
    from axioma.cs import CoordSysFactory

    # Описание геометрического атрибута
    gd = GeometryAttributeDefinition('geometry', CoordSysFactory.defaultCoordSysFactory().LatLongCoordSystem())
    # Описание атрибута с оформлением
    rd = RenditionAttributeDefinition()
    # Описание семантического атрибута (строковый тип с максимальной длиной 30)
    sd = SimpleAttributeDefinition('semantic', QMetaType.QString, 30)
    # Создание схемы на базе списка атрибутов
    schema = TableSchema([gd, rd, sd])
    print(schema.attributeNames())
