Описание класса QXmlName [модуль QtXmlPatterns]
Класс QXmlName представляет имя XML узла, действительное при применении пространств имён. Далее...
#include <QXmlName> Замечание: все функции этого класса реентерабильны.
Этот класс был введён в Qt 4.4.
Открытые функции
- QXmlName ()
- QXmlName ( QXmlNamePool & namePool, const QString & localName, const QString & namespaceURI = QString(), const QString & prefix = QString() )
- 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, вы обычно используете другой конструктор, который принимает name pool, 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::fromClarkName ( const QString & clarkName, const QXmlNamePool & namePool ) [static]
Конвертирует clarkName в QXmlName, вставляет в namePool и возвращает его.
Clark name - это способ представления полного имени QName с помощью только в одной строки, где пространство имён не может содержать скобок. Вот пара примеров:
Clark Name | Описание |
html | Локальное имя html вне пространства имён |
http:html | Локальное имя html в пространстве имён XHTML |
http:my:html | Локальное имя html в пространстве имён XHTML с префиксом my |
Если пространство имён содержит скобки, то возвращаемое значение является либо недопустимым, либо имеет неопределённое содержимое.
Если clarkName является недопустимым именем, то возвращается созданный по умолчанию QXmlName.
Эта функция была введена в Qt 4.5.
Смотрите также toClarkName().
bool QXmlName::isNCName ( const QString & candidate ) [static]
Возвращает true, если candidate является NCName. NCName - это строка, которая может быть использована как имя XML и XQuery, т.е. префикс или локальное имя в элементе или атрибуте или имя переменной.
Смотрите также Пространства имён в XML 1.0 (Вторая редакция), [4] NCName.
bool QXmlName::isNull () const
Возвращает true, если текущий QXmlName не инициализирован валидной комбинацией namespace URI, local name и prefix.
Всегда требуется валидное локальное имя. Префикс и URI пространства имён могут быть пустыми, но префикс не может быть пустым, если URI таковым не является. Локальные имена и префиксы должны быть правильными NCNames, т.е. 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:, Clark Name будет выглядеть так:
{http:
Если локальное имя равно MyWidget и пространство имён пустое, Clark Name возвращает:
MyWidget
Для повышения эффективности помните, что URI пространства имён, локальное имя и префикс хранятся не в QXmlName, а в QXmlNamePool, в который они были переданы при создании. Таким образом, тот же namePool должен быть использован в этой функции, потому он может быть использован для поиска трёх строк компонентов.
Эта функция будет полезна при отладке.
Смотрите также XML Namespaces, James Clark и fromClarkName().
bool QXmlName::operator!= ( const QXmlName & other ) const
Возвращает true, если текущее QXmlName не равен other; в противном случае возвращает false. Два QXmlNames равны, если совпадают их URI пространства имён and локальное имя. Они не равны, если отличаются или URI пространства имён, или локальные имена. Префиксы игнорируются.
Помните, что не имеет смысла сравнивать два объекта QXmlName, созданные с разнымиname pools, попытка сделать это приведёт к неопределённому поведению.
Смотрите также operator==().
QXmlName & QXmlName::operator= ( const QXmlName & other )
Ассоциирует other с this и возвращает this.
bool QXmlName::operator== ( const QXmlName & other ) const
Возвращает true, если текущее QXmlName равен переданному other; в противном случае возвращает false. Два QXmlNames равны, если совпадают их URI пространства имён и локальное имя. Префиксы игнорируются.
Помните, что не имеет смысла сравнивать два объекта QXmlName, созданные с разнымиname pools, попытка сделать это приведёт к неопределённому поведению.
Смотрите также operator!=().
Связанные нечлены класса
uint qHash ( const QXmlName & name )
Вычисляет хэш-ключ из локального имени и URI пространства имён переданного name. Префикс у name не используется при данной процедуре.
Эта функция была введена в Qt 4.4.
Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies) |
Торговые марки |
Qt 4.5.3 |
|