Класс 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