Класс 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 пространства имён не может быть пустым. Локальные имена и префиксы должны быть допустимыми NCName, например, 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. В частности, локальное имя и префикс (если он есть) должны быть допустимыми NCName. Функция 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, например, префикс или локальное имя в элементе или атрибуте, или имя переменной.
См. также 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==().
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/archives/qt-5.11/qxmlname.html