Spec-Zone.ru › Qt 5.14

Класс 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 пространства имён, локальное имя и префикс. Чтобы понять, что это означает в 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-пространства имён могут быть распределены по нескольким пулам имён.

Сравнение 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 представляет то, что иногда называют расширенным полным именем или просто полным именем.

См. также Пространства имён в 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.

Пользователь гарантирует, что строковые компоненты допустимы для полного имени. В частности, локальное имя и префикс (если он присутствует) должны быть допустимыми 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 — это способ представления полного имени с использованием только одной строки, где пространство имён не может содержать фигурных скобок. Вот несколько примеров:

Имя Кларка Описание
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, переданном в конструктор. Поэтому необходимо передать тот же namePool в эту функцию для поиска URI пространства имён.

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

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

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

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

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

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

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

MyWidget

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

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

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

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

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

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

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

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

Возвращает true, если этот QXmlName равен other; иначе false. Два QXmlNames равны, если их 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.14/qxmlname.html

Spec-Zone.ru

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