Обработка атрибутов и пространств имен

Пространства имен XML и атрибуты подобны в некотором отношении, но отличаются в других. Атрибуты являются парами значение-имя, обычно использующимися для содержания метаданных, связанных с элементом. Пространства имен значительно более сложны в цели. Они служат для различения элементов и атрибутов из других источников, имеющих идентичные имена, но различные значения. Они также используются для группировки связанных атрибутов и элементов так, чтобы приложение обработки могло легко распознать их. Пространства имен объявляются способом, подобным способу, которым атрибуты, но с xmlns:снабдите префиксом имя, присвоил значение, которое является URI, например:

<employee xmlns:emp=”http://www.acme.com/defs/empl.html”/>

Эта конструкция отображает префикс на уникальный идентификатор URI; после того префикс может использоваться для идентификации пространства имен атрибута или элемента (например, “<emp:title> </emp:title>”). Значение по умолчанию, префиксные меньше пространства имен могут также быть объявлены тем влиянием всеми текущими и происходящими элементами и атрибутами мимо точки объявления, если они не переопределяются другим пространством имен.

Несмотря на то, что цели атрибутов и пространств имен отличаются, они концептуально подобны. Они не могут быть дочерними элементами узла элемента, но они всегда тесно связаны с одним. Действительно связанный элемент является их родителем. Даже при том, что они - узлы NSXML — объекты NSXMLNode видов NSXMLAttributeKind и NSXMLNamespaceKind— они не могут иметь дочерних элементов и не могут быть дочерними элементами никакого узла. (Пространства имен, однако, могут квалифицировать атрибуты элемента, а также самого элемента.) С пространством имен и узлами атрибута не встречаются во время обхода документа.

Программируемый интерфейс NSXMLElement отражает это архитектурное сродство. Это предлагает подобные наборы методов для узлов пространства имен и узлов атрибута. Это обвиняет, объясняет, как использовать эти методы и затем обсуждает уникальную функцию пространства имен API: разрешение пространств имен.

Методы для управления атрибутами и пространствами имен

Класс NSXMLElement определяет методы для управления и доступа к атрибутам элемента, которые почти идентичны в форме другому набору методов для управления и доступа к узлам пространства имен. Таблица 1 перечисляет эти дополнительные наборы методов.

Табличный 1  Атрибут и методы обработки узла пространства имен

Методы атрибута

Методы пространства имен

addAttribute:

addNamespace:

setAttributes:setAttributesAsDictionary:

setNamespaces:

removeAttributeForName:

removeNamespaceForPrefix:

attributes

namespaces

attributeForName:attributeForLocalName:URI:

namespaceForPrefix:

Имена этих методов ясно указывают то, для чего Вы используете их, но гарантированы некоторые комментарии о каждой категории метода:

Как только Вы получили доступ к определенному пространству имен или приписываете узел, можно получить или установить его строку или возразить значению (см. Изменение Значений Узлов для подробных данных). Примите во внимание, что значением узла пространства имен является URI пространства имен; если Вы хотите установить URI как объектное значение, сделайте его объектом NSURL.

Разрешение пространств имен

Если Ваше приложение знает (или подозреваемые), что оно могло бы иметь дело с XML из других источников или созданное в различных словарях XML, таких как XSLT и RDF, оно должно иметь дело с пространствами имен. В любой точке обработки этому, возможно, придется знать пространство имен, с которым элемент или атрибут связываются для обработки того элемента или атрибута соответственно. Рассматриваемый вопрос set элемент, определяющийся и SVG и MathML в различных целях. Прежде чем можно будет определить значение a set элемент в документе, содержащем и SVG и разметку MathGL, необходимо узнать, какому пространству имен это принадлежит. Для обнаружения присоединения пространства имен элемента, необходимо разрешить его.

Для разрешения пространства имен NSXMLElement объявляет два метода вне тех обсужденных в Методах для Управления Атрибутами и Пространствами имен.

Первый метод берет квалифицированное или локальное имя элемента и возвращает узел пространства имен, представляющий пространство имен, которому принадлежит элемент. Ваше приложение может получить URI от узла (его строковое значение) и сравнить его со списком известного или ожидаемого URIs для определения присоединения пространства имен. Если нет никакого связанного пространства имен, resolveNamespaceForName: возвраты метода nil.

Второй метод разрешения пространства имен, resolvePrefixForNamespaceURI:, работы в противоположном направлении. Вы передаете в URI и возвращаете префикс, связанный с тем URI. Например, когда Вы добавляете элементы к документу и должны знать префиксы их полностью определенных имен, можно использовать этот метод.