Spec-Zone.ru › Qt 5.15

Класс 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 имеет три компонента: namespace URI, local name и prefix. Чтобы увидеть, что это означает в 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 ассоциируется с пулом имён name pool, который должен быть указан во время создания QXmlName. Три компонента QXmlName, то есть namespace URI, local name и prefix, хранятся в пуле имён, сопоставленные с идентификаторами, чтобы они могли быть объединены. По этой причине единственный способ создать допустимый экземпляр QXmlName — использовать конструктор класса, где необходимо указать пул имён name pool, local name, namespace URI и prefix.

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

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

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

Сравнение QXmlName

Чтобы определить, к чему относится QXmlName, используются namespace URI и local name. prefix не используется, поскольку prefix — это просто сокращённое имя, используемое вместо обычно более длинного namespace URI. Prefix также не используется при сравнении имён. Например, следующие два узла элемента представляют один и тот же элемент и равны.

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

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

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

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

QXmlName::QXmlName()

Создаёт неинициализированный QXmlName. Для создания допустимого QXmlName обычно используется другой конструктор, который принимает пул имён name pool, namespace URI, local name и prefix в качестве параметров. Но вы также можете использовать этот конструктор для создания нулевого 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 с помощью только одной строки, где namespace не может содержать фигурные скобки. Вот несколько примеров:

Имя Кларка Описание
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.15/qxmlname.html

Spec-Zone.ru

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