2008-09-24 9 views
61

Это то, что мне всегда трудно понять другим: Почему существуют пространства имен XML? Когда мы должны использовать их, а когда нет? Каковы общие ошибки при работе с пространствами имен в XML?Для чего нужны пространства имен XML?

Также, как они относятся к XML-схемам? Должны ли XSD-схемы всегда ассоциироваться с пространством имен?

ответ

31

Они предназначены для одновременного объединения нескольких языков разметки, не беспокоясь о конфликтах имен элементов и атрибутов.

Например, посмотрите на любой бит XSLT-кода, а затем подумайте, что произойдет, если вы не используете пространства имен и пытались написать XSLT, где вывод должен содержать «шаблон», «для каждого», , и т. д., элементы. Синтаксические ошибки - вот что.

Я оставлю советы и ошибки других с большим опытом, чем И.

+1

Я удивлен, что [эта ошибка] (http://lists.xml.org/archives/xml-dev/200306/msg00010.html) все еще держится, 10-15 лет спустя. Также см. [This] (http://lists.xml.org/archives/xml-dev/200305/msg00836.html) – arayq2 2013-06-05 13:46:32

+1

Вы говорите, что это неверно, что пространства имен являются хорошим решением или вы говорите, что это неверно, что они были предназначенные для использования при деконфликт, и на практике используются таким образом (с какими-либо недостатками)? Я утверждаю только последнее. – 2013-06-05 23:07:27

+1

Я говорю, что пространства имен XML вовсе не являются решением. устройство «решает» только некоторые варианты использования, но далеко не все, и тем более за счет исключения общего решения, которое на самом деле существует и действительно существовало еще до того, как эта глупость увидела свет дня. И, кстати, изначально они были «предназначены» для обозначения происхождения, но когда указывалось, что это уже проблема, инициаторы начали перемещать стойки ворот и держались на ней, пока критики не нашли их время] (http://lists.xml.org/archives/xml-dev/200305/msg00344.html). – arayq2 2013-06-10 20:41:55

0

От W3 recommendation ...

Пространства имен XML предоставляет простой метод для квалифицируемых имен элементов и атрибутов, используемых в Extensible Markup Language документов, связывая их с пространствами имен, идентифицируемых с помощью ссылок URI.

+2

Не отвечает на вопрос. Вопрос: «Что такое пространства имен для», а не «дайте определение». – MarkJ 2009-10-14 12:15:33

+0

Я думаю, что было бы полезно на самом деле дать вашу точку зрения. Возможно, вы смогли дать этому человеку некоторое представление, которое не читало рекомендацию W3. – Jacques 2012-08-13 17:03:06

0

Пространство имен используются для устранения неоднозначности имен, которые используются в документе. Он также дает возможность привязывать короткое имя к пространству имен, которое затем может использоваться для ссылки на удаленный элемент или атрибут. Само пространство имен относится к местоположению, которое определяет элементы и атрибуты, используемые в документе. Намного больше узнать, но это и есть его сердце. Существует намного больше информации here.

16

Это почти то же самое, что спрашивать «почему мы используем пакеты для Java/C#?»:

  • повторное использование: Вы можете повторно использовать набор тегов/атрибутов, которые определяют между различными типами XML-документов ,
  • modularity: Если вам нужно добавить некоторый «аспект» в ваш XML; добавление пространства имен в ваш XML-документ проще, чем изменение всего определения схемы xml.
  • Избегайте использования «основного» пространства имен: вы не заставляете ваш синтаксический анализатор работать с огромным определением схемы, просто используйте пространство имен, в котором вы нуждаетесь.
1

Например: XML Namespaces by Example

В моих словах: Если вы должны использовать какой-то формат XML для внешней компании (к примеру), и вам необходимо предоставить в XML-документе некоторой информации, которая имеет такое же имя, вам нужно Пространство имен. Пример:

<sampleDoc> 
    <header title="Hello world!"> 
     <items> 
     <item name="Volvo" color="Blue"/> 
     </items> 
    </header> 
</sampleDoc> 

и вы хотите объединить некоторые данные в этот документ, который имеет такое же имя, но другой смысл (так значение), вы должны использовать пространство имен:

<sampleDoc> 
    <header title="Hello world!"> 
     <items> 
     <item name="Volvo" color="White" my_unique_namespace:color="#FFFFFF"/> 
     </items> 
    </header> 
</sampleDoc> 

Ofcourse - вы можете изменить имя атрибута. Например, «my_unique_color». Bud в другом документе, снова может быть атрибут с таким же именем.Итак, если у вас есть уникальное пространство имен (например, наш веб-домен), вы всегда можете использовать одинаковые имена элементов и/или атрибутов при любых проблемах.

5

Рассматривайте их как фамилии для типов элементов. Если у вас есть двое друзей, обоих зовут Боб, и вы говорите об одном из них, кто-то может спросить, о ком вы говорите. Просто сказать «Боб» не очень полезно, поэтому вы говорите «Боб Смит» или «Боб Джонс».

Это то же самое с типами элементов. Иногда короткого имени недостаточно, потому что разные люди могут выбрать одно и то же имя. Таким образом, вы включаете URI в качестве «фамилии», чтобы различать разные Бобы там.

5

XML - это супер-язык, означающий, что он является основой для любого языка на основе XML (имеет смысл, правильно?). Подумайте о XML как о ручке, которая может писать любое предложение на любом языке. Все зависит от автора, и, желательно, язык должен быть известен читателю.

XML namespace - это в основном название языка, как «английский» или «עברית». Я помогаю получателю XML-документа проанализировать его и извлечь информацию внутри.

Предположим, что у меня есть мебельная фабрика, и у вас есть мебельный магазин. приложение для хранения и мое приложение питания не имеют никакого отношения, но когда они общаются с помощью сообщений XML, сообщения должны быть понятными и легко разобраны с обеих сторон

Таким образом, обе системы должны знать схемы, которая определяет язык синтаксис и согласованные ограничения. Вспомните схему как словарь и учебник грамматики. Схема - это документ, который должны знать обе системы, о том, кто должен знать код разбора в каждой системе, и который включает объявление пространства имен.

Каждое пространство имен называется URI, в большинстве случаев это местоположение документа схемы, который его определяет.

Конечно, не каждому XML-документу требуется пространство имен, особенно если оно не используется для передачи информации в удаленную систему. Например, когда вы сериализуете объекты в XML для сохранения в своей базе данных.

12

Самая большая погрешность ИМХО - это документы, интерпретирующие взаимодействие человека. разработать код для обработки XML Doc. Слишком легко сосредоточиться на буквальном выражении документа, а не на информационном результате анализа документа.

например. следующие узлы

<a xmlns="uri:foo"/> 
<foo:a xmlns:foo="uri:foo"/> 
<bar:a xmlns:bar="uri:foo"/> 

все семантически идентичны - но очень отличаются от наивного глаза.

В первом примере возникает очень распространенная ошибка при разработке XPaths - отсутствует тот факт, что «a» находится в пространстве имен, поэтому // не дает совпадений. (или, что еще хуже, совпадающие узлы в другом пространстве имен!)

3-й пример открывает еще один недостаток в понимании - текст префикса семантически значим. При анализе документов с помощью XPATH я могу объявить любой префикс, который мне нравится для сопоставления, если это uri соответствует документу.

3

Мы используем пространства имен, потому что люди xeep хотят использовать одни и те же слова, чтобы обозначать разные вещи в их собственном частном idaho. Обычно вы можете определить из контекста, что означает человек. В кадровой базе данных XML - это записи персонала. В базе данных реестра транспортных средств XML - это записи реестра транспортных средств.

Оба сохраняют тег с именем «location», но тег означает разные вещи для каждого и содержит разные поля.

Теперь это круто: но что, если вам нужно или хотите хранить XML из обеих баз данных? Или, что более интересно, что, если обе базы данных хотят хранить фрагменты XML из какой-либо другой общей базы данных (например, базы данных учетных записей).

Пространства имен XML связывают с каждым тегом XML URI, так что у самого имени тега перед ним есть URL-адрес, это часть имени тега (конечно, фактические документы XML используют сокращенную версию). Тщательно выбирая URI, легко быть уверенным, что имена тегов не будут сталкиваться - это похоже на то, что два тега местоположения были названы совершенно по-другому, поэтому нет путаницы. В качестве бонуса два совершенно разных тега местоположения могут включать материал из базы данных учетных записей и явно указывают, что они говорят об одном и том же.

Вещь, которая делает все это полезной, - XPATH.

С вышеуказанным вы можете начать писать выражения XPATH, которые говорят такие вещи, как: найдите мне accounts:account overdue в любом месте этого xml. Или: найдите мне любые accounts:warning message элементы в этом конкретном фрагменте XML, где предупреждающее сообщение является дочерним узлом (каким бы глубоким ни был) ни узла personnel:payment, ни узла vehicle:status.

Это выражение XPATH может использоваться где-то в документе XSLT, задачей которого является преобразование XML в XHTML или XPDF для отображения.

Что такое выигрыш? Почему? Поскольку вы можете искать файл журнала XML, вытаскивайте все сообщения с просроченными сообщениями, где бы они ни появлялись, , не путая их с тегами «сообщения», создаваемыми другими системами, конвертировать их в xhtml и отображать их жирным красным цветом с помощью тега css : все без написания записки процедурного кода.

13

Почему существуют пространства имен XML?

Потому что в 1997 году некоторые очень влиятельные лица в W3C хотели их и не приняли бы за ответ. Даже когда это было продемонстрировано, я решительно говорю, что есть лучшие способы решения «проблемы», которые, по их мнению, они имели, они все же использовали свое влияние, чтобы их желания были записаны в Рекомендацию W3C.

Самым крупным в настоящее время обширной мифологией вокруг пространства имен XML является то, что для них есть технические достоинства. (Это влияние нижеизложенной Рекомендации, просто существующей и, следовательно, занимающей пространство мышления - «да, должна быть (хорошая) причина!» - в отличие от забываемой сноски где-то.)

Much pain, no gain.

Когда мы должны использовать их, а когда нет?

Вы не должны использовать их, если сможете это сделать. К сожалению, неустанное продвижение этого устройства BAD [*] заинтересованными сторонами способствовало созданию кластерных функций спецификаций сегодня, из-за чего практически невозможно не столкнуться с пространствами имен XML в какой-то момент. Таким образом, даже если вы избегаете пространства имен XML самостоятельно, вы обнаружите, что на вас нападают пространства имен, со всех сторон или, что еще хуже, инструменты, которые просто отказываются работать, если вы не кормите их такой крапивкой.

Каковы распространенные ошибки при работе с пространствами имен в XML?

Очень распространенная ошибка заключается в использовании выражений Xpath с документами, в которых пространство имен было «дефолтом»: пространство имен должно быть явным в выражениях. Другая проблема заключается в их правильном использовании при построении документов: they create problems out of thin air.

Также, как они соотносятся с XML-схемами? Должны ли XSD-схемы всегда ассоциироваться с пространством имен?

Нет необходимости в отношении, за исключением того, что спецификация схемы XSD была разработана в то время, когда почти все члены комитета имели бит XML Namespaces в своих зубах. Поэтому они работали так глубоко, как могли. Тем не менее, можно использовать схемы XSD без пространств имен, но это крутой подъемник, так как почти каждый набор инструментов, поддерживающий схемы XSD, предполагает, что вы будете «хотеть» использовать пространства имен.

[*] BAD = сломана Разработанный

UPDATE: An old essay on this non-solution to a non-problem.

 Смежные вопросы

  • Нет связанных вопросов^_^