Spec-Zone.ru › Qt 5.13

Класс QXmlName

Класс QXmlName представляет имя узла XML эффективным и учитывающим пространства имён способом. QXmlName представляет имя узла XML таким образом, что сравнение имён становится эффективным и безопасным. Обычно узел XML представляет элемент или атрибут XML, но QXmlName также может представлять имена других типов узлов, например, QAbstractXmlReceiver::processingInstruction() и QAbstractXmlReceiver::namespaceBinding(). Подробнее...

Заголовок: #include <QXmlName>
qmake: QT += xmlpatterns
С: Qt 4.4

Этот класс был представлен в Qt 4.4.

  • Список всех членов, включая унаследованные

Примечание: Все функции в этом классе являются многопоточными.

Публичные функции

QXmlName(const QXmlName &other)
QXmlName(QXmlNamePool &namePool, const QString &localName, const QString &namespaceURI = QString(), const QString &prefix = QString())
QXmlName()
QXmlName & operator=(const QXmlName &other)
bool isNull() const
QString localName(const QXmlNamePool &namePool) const
QString namespaceUri(const QXmlNamePool &namePool) const
QString prefix(const QXmlNamePool &namePool) const
QString toClarkName(const QXmlNamePool &namePool) const
bool operator!=(const QXmlName &other) const
bool operator==(const QXmlName &other) const

Статические публичные члены

QXmlName fromClarkName(const QString &clarkName, const QXmlNamePool &namePool)
bool isNCName(const QString &candidate)

Связанные нечлены

uint qHash(const QXmlName &name)

Подробное описание

Имя узла XML имеет три компонента: URI пространства имён, локальное имя и префикс. Для понимания их значения рассмотрим следующий фрагмент.

<book xmlns:dc='http://purl.org/dc/elements/1.1'
      xmlns='http://example.com/MyDefault'>
    <dc:title>Mobey Dick</dc:title> ...
</book>

Для элемента с именем book, функция localName() возвращает book, функция namespaceUri() возвращает http://example.com/MyDefault, а функция prefix() возвращает пустую строку. Для элемента с именем title, localName() возвращает title, namespaceUri() возвращает http://purl.org/dc/elements/1.1, а prefix() возвращает dc.

Для обеспечения эффективности операций с QXmlName, например, копирования имён и сравнения их, каждый экземпляр QXmlName связан с пулом имён, который должен быть указан при создании QXmlName. Три компонента QXmlName — URI пространства имён, локальное имя и префикс — хранятся в пуле имён, сопоставленные с идентификаторами, для совместного использования. По этой причине единственный способ создать действительный экземпляр QXmlName — использовать конструктор класса, где необходимо указать пул имён, локальное имя, URI пространства имён и префикс.

Обратите внимание, что конструктор по умолчанию QXmlName создает нулевой экземпляр. Он обычно используется для выделения неиспользуемых записей в коллекциях QXmlName.

Побочным эффектом связи каждого экземпляра QXmlName с пулом имён является то, что каждый экземпляр QXmlName привязан к QXmlNamePool, с которым он был создан. Однако класс QXmlName не отслеживает пул имён, поэтому все функции доступа, например, namespaceUri(), prefix(), localName() и toClarkName(), требуют передачи корректного пула имён. Неуказание корректного пула имён в этих функциях доступа приводит к неопределённому поведению.

Обратите внимание, что пул имён — это не пространство имён XML. Один пул имён может представлять экземпляры QXmlName из разных пространств имён XML, и экземпляры QXmlName из одного пространства имён XML могут быть распределены по нескольким пулам имён.

Сравнение QXmlName

Для определения того, что представляет QXmlName, используются URI пространства имён и локальное имя. Префикс не используется, потому что он просто сокращённое имя, используемое вместо обычно намного более длинного URI пространства имён. Префикс также не используется при сравнении имён. Например, следующие два узла элемента представляют один и тот же элемент и сравниваются как равные.

<svg xmlns="http://www.w3.org/2000/svg"/>
<x:svg xmlns:x="http://www.w3.org/2000/svg"/>

Хотя у второго имени есть префикс x, два имени сравниваются как равные как экземпляры QXmlName, потому что префикс не используется при сравнении.

Локальное имя никогда не может быть пустой строкой, хотя префикс и URI пространства имён могут. Если префикс не пустой, URI пространства имён не может быть пустым. Локальные имена и префиксы должны быть допустимыми NCName, например, abc.def или abc123.

QXmlName представляет то, что иногда называется расширенным именем QName или просто именем QName.

См. также Пространства имён в XML 1.0 (второе издание), [4] NCName.

Документация функций-членов

QXmlName::QXmlName(const QXmlName &other)

Создает копию other.

Эта функция была представлена в Qt 5.9.

См. также operator=().

QXmlName::QXmlName(QXmlNamePool &namePool, const QString &localName, const QString &namespaceURI = QString(), const QString &prefix = QString())

Создает экземпляр QXmlName, который вставляет localName, namespaceURI и prefix в namePool, если они там ещё не присутствуют. Функции доступа namespaceUri(), prefix(), localName() и toClarkName() должны получать namePool, использованный здесь, поэтому namePool должен оставаться в области видимости, пока могут использоваться функции доступа. Однако два экземпляра можно сравнивать с помощью == или != и копировать без namePool.

Пользователь гарантирует, что компоненты строк являются допустимыми для имени QName. В частности, локальное имя и префикс (если он присутствует) должны быть допустимыми NCName. Функция isNCName() может использоваться для проверки валидности этих имён. URI пространства имён должен быть абсолютным URI. QUrl::isRelative() может использоваться для проверки того, является ли URI пространства имён относительным или абсолютным. Наконец, предоставление префикса не является допустимым, если не указан URI пространства имён.

namePool не копируется. Ссылка на него также не сохраняется в этом экземпляре. Этот конструктор вставляет три строки в namePool.

QXmlName::QXmlName()

Создает неинициализированный QXmlName. Для построения действительного QXmlName обычно используется другой конструктор, который принимает пул имён, URI пространства имён, локальное имя и префикс в качестве параметров. Но вы также можете использовать этот конструктор для построения нулевого QXmlName, а затем присвоить ему существующий QXmlName.

См. также isNull().

QXmlName &QXmlName::operator=(const QXmlName &other)

Присваивает other переменной this и возвращает this.

[static] QXmlName QXmlName::fromClarkName(const QString &clarkName, const QXmlNamePool &namePool)

Преобразует clarkName в QXmlName, вставляет в namePool и возвращает его.

Имена в формате Clark — способ представления полного имени QName с использованием одной строки, где имя пространства имён не может содержать фигурные скобки. Вот несколько примеров:

Имя в формате Clark Описание
html Локальное имя html, без пространства имён
http://www.w3.org/1999/xhtmlhtml Локальное имя html, в пространстве имён XHTML
http://www.w3.org/1999/xhtmlmy:html Локальное имя html, в пространстве имён XHTML, с префиксом my

Если имя пространства имён содержит фигурные скобки, возвращаемое значение может быть недействительным или содержать неопределённое содержимое.

Если clarkName является недействительным именем, возвращается QXmlName по умолчанию.

Эта функция была добавлена в Qt 4.5.

См. также toClarkName().

[static] bool QXmlName::isNCName(const QString &candidate)

Возвращает true, если candidate является NCName. NCName — это строка, которая может использоваться в качестве имени в XML и XQuery, например, префикс или локальное имя в элементе или атрибуте, или имя переменной.

См. также Namespaces in XML 1.0 (Second Edition), [4] NCName.

bool QXmlName::isNull() const

Возвращает true, если этот QXmlName не был инициализирован с помощью допустимой комбинации URI пространства имён, локального имени и префикса.

Обязательно наличие допустимого локального имени. Префикс и URI пространства имён могут быть пустыми, но если префикс не пустой, то URI пространства имён не должен быть пустым. Локальные имена и префиксы должны быть допустимыми NCName, например, abc.def или abc123.

QString QXmlName::localName(const QXmlNamePool &namePool) const

Возвращает локальное имя.

Обратите внимание, что для повышения эффективности строка локального имени не хранится в QXmlName, а в QXmlNamePool, переданном в конструктор. Поэтому, для получения локального имени необходимо передать тот же namePool.

QString QXmlName::namespaceUri(const QXmlNamePool &namePool) const

Возвращает URI пространства имён.

Обратите внимание, что для повышения эффективности строка URI пространства имён не хранится в QXmlName, а в QXmlNamePool, переданном в конструктор. Поэтому, для получения URI пространства имён необходимо передать тот же namePool.

QString QXmlName::prefix(const QXmlNamePool &namePool) const

Возвращает префикс.

Обратите внимание, что для повышения эффективности строка префикса не хранится в QXmlName, а в QXmlNamePool, переданном в конструктор. Поэтому, для получения префикса необходимо передать тот же namePool.

QString QXmlName::toClarkName(const QXmlNamePool &namePool) const

Возвращает этот QXmlName в формате имени Clark. Например, если локальное имя html, префикс x, и URI пространства имён http://www.w3.org/1999/xhtml/, то возвращаемое имя Clark будет:

{http://www.w3.org/1999/xhtml/}x:html.

Если локальное имя MyWidget, а пространство имён пустое, то возвращаемое имя Clark будет:

MyWidget

Обратите внимание, что для повышения эффективности строки URI пространства имён, локального имени и префикса не хранятся в QXmlName, а в QXmlNamePool, переданном в конструктор. Поэтому, для получения этих трех компонент необходимо передать тот же namePool.

Эта функция может быть полезна для отладки.

См. также XML Namespaces, James Clark и fromClarkName().

bool QXmlName::operator!=(const QXmlName &other) const

Возвращает true, если этот QXmlName не равен other; иначе false. Два QXmlName равны, если их URI пространств имён совпадают и их локальные имена совпадают. Они не равны, если их URI пространств имён различны или их локальные имена различны. Их префиксы игнорируются.

Обратите внимание, что сравнение двух экземпляров QXmlName, созданных с помощью разных пулов имён, не имеет смысла, но попытка сравнения не обнаруживается и поведение не определено.

См. также operator==().

bool QXmlName::operator==(const QXmlName &other) const

Возвращает true, если этот QXmlName равен other; иначе false. Два QXmlName равны, если их URI пространств имён совпадают и их локальные имена совпадают. Префиксы игнорируются.

Обратите внимание, что сравнение двух экземпляров QXmlName, созданных с помощью разных пулов имён, не имеет смысла, но попытка сравнения не обнаруживается и поведение не определено.

См. также operator!=().

Связанные нечлены

uint QXmlName::qHash(const QXmlName &name)

Вычисляет ключевое значение хэша из локального имени и URI пространства имён в name. Префикс в name в вычислении не используется.

Эта функция была добавлена в Qt 4.4.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.13/qxmlname.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API