Spec-Zone.ru › Qt 5.9

Класс QXmlName

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

Заголовок: #include <QXmlName>
qmake: QT += xmlpatterns
С момента: Qt 4.4
  • Список всех членов, включая унаследованные

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

Открытые функции

QXmlName()
QXmlName(QXmlNamePool &namePool, const QString &localName, const QString &namespaceURI = QString(), const QString &prefix = QString())
QXmlName(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
QXmlName & operator=(const QXmlName &other)
bool operator==(const QXmlName &other) const

Статические открытые члены

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

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

uint qHash(const QXmlName &name)

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

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

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

<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 могут быть распределены по нескольким пулам имён.

Сравнение QXmlNames

Для определения того, что представляет собой 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 пространства имён не может быть пустым. Локальные имена и префиксы должны быть допустимыми NCNames, например, abc.def или abc123.

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

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

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

QXmlName::QXmlName()

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

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

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. В частности, локальное имя и префикс (если он присутствует) должны быть допустимыми NCNames. Функция isNCName() может использоваться для проверки валидности этих имён. URI пространства имён должен быть абсолютным URI. QUrl::isRelative() может использоваться для проверки, является ли URI пространства имён относительным или абсолютным. Наконец, предоставление префикса недопустимо, когда не указан URI пространства имён.

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

QXmlName::QXmlName(const QXmlName &other)

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

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

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

[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, например, префикс или локальное имя в элементе или атрибуте, или имя переменной.

См. также Пространства имён в XML 1.0 (второе издание), [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, переданном в конструктор. Поэтому тот же самый namePool должен быть передан в эту функцию, чтобы можно было найти URI пространства имён.

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

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

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

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

Возвращает этот QXmlName в формате Clark Name. Например, если локальное имя — 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, Джеймс Кларк и fromClarkName().

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

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

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

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

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

Присваивает other объекту this и возвращает this.

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

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

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

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

Связанные нечленные функции

uint 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.9/qxmlname.html

Spec-Zone.ru

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