2016-02-05 3 views
1

Я знаю функциональность пространств имен, который используется в C++ и C. Но я не понимаю эту строку кода в XSLT:XSL - для чего используется пространство имен? и что это?

xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 

Что это там? Что произойдет, если я пропущу это? (Ничего не произойдет, если удалить эту строку) ... А что это указательный к? `

Я прочитал некоторые сообщения об этом в W3Cschools ... Но я до сих пор не понял ...

Заранее спасибо.

+0

http://www.w3schools.com/xml/xml_namespaces.asp. Есть миллион учебников по пространствам имен из поиска Google. – OldProgrammer

+0

и почему мне нужно пространство имен в XSLT? Я просто получил один XSLT ... не может быть конфликта между XML и XSLT, я думаю. –

+0

@ H.Senkaya: Если ваш XSLT не генерирует XML ... – choroba

ответ

4

Этот вопрос заслуживает лучшего объяснения.

Вот элемент с именемtable:

<table material="wood" 
     legs="4" shape="rectangle" type="dining"/> 

Из значений его 4 атрибутов, ясно, что это описывает деревянный, обеденный стол с четыре ноги и прямоугольный форма.

Вот ещеtableэлемент:

<table name="Product"> 
    <columns> 
    <column name="id"/> 
    <column name="name" type="string"/> 
    <column name="price" type="decimal"/> 
    <column name="date-produced" type="date"/> 
    </columns> 
    <rows> 
    <row id="1" name="bike" price="300" quantity="2" 
       date-produced="2013-08-12"/> 
    </rows> 
</table> 

Это явно не предмет мебели, но, вероятно, таблицареляционной базы данных.

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

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

<furniture:table/> 
<sql:table/> 
<resataurant:table/> 
<html:table/> 

<sql:column/> 
<architecture:column/> 
<table:column> 

<css:style/> 
<architecture:style/> 
<fashion:style/> 

Здесь мы имеем три различных названия элементов: «таблицы »,« Column »и« style », каждая из которых принадлежит> 1 словарям.

Есть 8 различных словарей, представленные этими элементами:

  1. furniture, sql, restaurant и html для имени table
  2. sql, architecture и table для имени column
  3. css, architecture и fashion за имя style.

Цель пространства имен является определение словарного запаса, к которому принадлежит данное имя. Другими словами, устранить двузначные имена, принадлежащие разным словарям.

Вот типичныйимен декларации:

< XSL: таблицы стилей версия = "1,0"
xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">

Он связывает префикс пространства имен а для a namespace URI (Единый R Идентификатор источника).

Эффект этого объявления пространства имен является то, что имя: xsl:stylesheet принадлежит пространству имен с пространствами имен URI-строка “http://www.w3.org/1999/XSL/Transform”

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

Однако URI пространства имен должен быть глобально уникальным.: пространство имен XSLT всегда является одной и той же строкой, независимо от того, какой префикс связан с ней.

Приставка:

  • ли часть имени атрибута, который следует за "xmlns:"
  • не может содержать символ ":"
  • Если имя атрибута только xmlns то префикс «» (пустая строка)

NS U RI:

  • Может быть любая строка: "^%$23rt", "http://myComp.com", "my:my"
  • Должно быть уникальным.
  • Может ли быть значимым URL.
  • Если это значимый URL, для этого не требуется страница с этим URL-адресом. Процессор XML не выдает HTTP-запрос для доступа к этому URL-адресу.

Обратите внимание:

  • Пространство имен URI должен быть уникальным: это самое важное требование для пространства имен.
  • Может ли (но не обязательно) быть значимым URL-адресом - что более важно, является уникальность строки.
  • Если NS URI является значимым URL, это не требует, чтобы страница с этим URL-адресом существовала. Для NS URI не выдается HTTP-запрос.

Common misconceptions


Теперь, чтобы ответить на конкретные вопросы:

Я не понимаю эту строку кода в XSLT: xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

Что это для чего?

Это объявление пространства имен для XSLT пространства имен, который определяет XSLT словарь

Его цель заключается в неоднозначности любого элемента и имена атрибутов, которые находятся в этом пространстве имен из других вхождений те же имена, которые принадлежат другим словарям (или не принадлежат к какой-либо лексике (относятся к «пустой» лексике).

Что произойдет, если я пропущу это?

В случае нет имен XSLT декларации указано в документе XML, а затем:

  • процессор XSLT не обнаружат никаких <xsl:stylesheet> декларации, инструкции, элементы или атрибуты, которые он понимает. Он не будет работать и, скорее всего, сообщит об ошибках.
  • В случае отсутствия объявления пространства имен с префиксом «xsl», но внутри документа есть имена элементов (или атрибутов) с этим префиксом, тогда даже анализатор XML будет вызывать ошибку, что вход не является хорошим -формированный XML-документ.

И что это за указатель?

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

И процессор XSLT определенно не выдает такого HTTP-запроса - любой может доказать это, отключив все сети и выполнив любое преобразование XSLT - преобразование все еще дает свои результаты.

Но в данном конкретном случае, если вы попробуете этот URL в браузере, вы увидите, что W3C был дружественным к своим многочисленным пользователям и страница на самом деле служил:

The W3C "XSLT-Namespace" page

Я читал некоторые сообщения об этом в W3Cschools ... Но я до сих пор не понял ...

W3Schools не считается хорошим ресурсом о XML/XSLT/XPath, - как пояснил т: W3Fools

Единственный авторитетный источник о XML, Пространства имен XML и XSLT является их соответствующая спецификация: http://www.w3.org/TR/2008/REC-xml-20081126/, http://www.w3.org/TR/2006/REC-xml-names-20060816/ и https://www.w3.org/TR/1999/REC-xslt-19991116 (последний является XSLT 1.0 спецификации - существуют отдельные спецификации для XSLT 2.0 и XSLT 3.0)

Однако спецификации W3C не были написаны с целью обеспечения удобства использования. Если кто-то хочет узнать больше о XSLT и XML, я бы порекомендовал свой видеокурс в Pluralsight: XSLT 2.0 and 1.0 Foundations - второй модуль этого курса подробно объясняет концепцию пространств имен XML.

+0

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

+0

@ Х.Сенкая, Добро пожаловать. –

2

Ничего не произойдет, если удалить эту строку

Ну, это просто не так. Если вы удалите объявление пространства имен, ваша таблица стилей перестанет работать. Фактически, это больше не будет таблицей стилей XSLT.

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

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