Добро пожаловать на мой блог

The world is yours

Xml –язык разметки но не программирования.

Xml- extensible markup language.

(Расширяемый язык разметки)

1.Способ записи структурированных данных.

2.Отказоустойчивость

3.XML это текст, но он не предназначен для чтения.

4.XML- умышленно многословен.

5.XML – это семейство технологий.

6.Свободно лицензируемая и хорошо поддерживаемая.

<?xml version="1.0" ?>
<?xml version="1.0" encoding="Windows-1251" ?>.

Кодировки-

ASCII

Windows-1251

Windows-1252

KOI8-R

KOI8-U

MacCyrillic

UTF-8

UTF-16

UTF-32

Standalone=”yes/no” – указывает на то использует ли данный документ какие-либо внешние объявления.

Yes- не использует

No – использует

По умолчанию NO

  1. Документ XML может содержать единственный корневой элемент.
  2. Элементы не могут перекрываться.
  3. Конечные тэги являются обязательными.
<?xml version="1.0"?>
<корневой_элемент>

</корневой_элемент>
<?xml version="1.0"?>
<корневой_элемент>
        <элемент>
               Текст <еще_элемент атрибут="значение" /> текст ...
        </элемент>
        Текст текст текст <элемент>текст текст... </элемент>  ...
</корневой_элемент>
  1. Элементы XML чувствительны к регистру.
  2. Аттрибуты обязательно должны иметь значение.
  3. имена атрибутов обязательны должны быть заключена в кавычки одинарные или двойные.
  4. <![CDATA[ …. ]]>  – Как pre  в HTML

8.Сущности – &gt –больше, &lt-меньше,

&quot – кавычки двойные, &apos –одинарная кавычка, &amo – амперсант.

DTD- data type definition.

<?xml version=”1.0”?>

<!DOCTYPE root[……….]

<root>

</root>

Подключить ссылку:

<!DOCTYPE root SYSTEM”./dtd/dtd.dtd”>

  1. Анализируемые – содержимое сущности анализируется
  2. Не анализируемые
  3. Параметрические.

<!DOCTYPE root[<!ENTITY author ” Иванов.И.И”>

<!ENTITY name SYSTEM”1.txt”>

Нотация описывает содержимое разработанное не на языке XML.

Неанализируемые сущности и нотации

<!NOTATION doc  SYSTEM "winword.exe">
<!NOTATION jpeg SYSTEM "c:Progrm FilesACDSeeacdsee.exe">
<!ENTITY photo SYSTEM "images/myphoto.jpg" NDATA jpeg>

Элементы

"Сердцем и душой" документа XML является элемент. В DTD типы элементы объявляются при помощи ключевого слова ELEMENT:

<!ELEMENT message (#PCDATA)>
...

За ключевым словом ELEMENT должно следовать имя элемента (message), затем, спецификация содержания (#PCDATA - анализируемые символьные данные). Существуют следующие варианты описания содержания элементов:

EMPTY – элемент пустой (без закрывающего тэга)

ANY -  Любой, может содержать как и текст и вложенные элементы

(#PCDATA)  - Элемент может содержать только текст

(модель содержания)

EMPTY

При помощи ключевого слова EMPTY описываются элементы с пустым содержанием. Такие элементы не могут содержать текст или порожденные (дочерние) элементы, но могут иметь атрибуты. Например:

<!ELEMENT logo EMPTY>
...
<logo src="./images/logo.gif" address="http://company.com"/>

Подобные элементы наверняка встречались вам и ранее в курсе HTML. Например:

<br />
<img src="./images/logo.gif" />

#PCDATA - анализируемые символьные данные

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

<!ELEMENT author (#PCDATA)>
...
<!-- корректная конструкция -->
        <author>Автор: &author;</author>
<!-- некорректная конструкция (содержит элемент <b>) -->
        <author><b>Автор:</b> &author;</author>

ANY

Данный тип содержания полностью соответствует значению слова: ANY - любой. Элемент может содержать анализируемые текстовые данные (#PCDATA) вперемешку с дочерними элементами. Например:

<!ELEMENT lesson ANY>
...
<lesson>
        Название: <title>Использование DTD</title>
        Автор: <author>&author;</author>
        ...

Чисто элементное содержание

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

Символ Значение
| Задает выбор одного варианта из нескольких возможных:

<!ELEMENT elem (a|b|c)>

означает, что описываемый элемент (elem) может содержать или элемент a, или элемент b, или элемент c.

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

<!ELEMENT elem (a,b,c)>

означает, что описываемый элемент содержит элемент a, затем элемент b и, наконец, элемент c.

? Указывает, что перечисленные элементы необязательны, но, если присутствуют, должны использоваться только 1 раз:

<!ELEMENT elem (a,(b|c)?)>

означает, что описываемый элемент содержит элемент a, затем необязательный элемент b или необязательный элемент c.

* Указывает, что перечисленные элементы могут повторяться неограниченное количество раз, или ни разу:

<!ELEMENT elem (a*)>

означает, что описываемый элемент может быть пустым, или содержать несколько элементов a.

+ Указывает, что перечисленные элементы могут повторяться неограниченное количество раз (минимум 1 раз):

<!ELEMENT elem (a*)>

означает, что описываемый элемент может содержать один или более элементов a.

() Скобки служат, как вы уже наверное догадались, для группировки элементов.

Смешанное содержание

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

<!DOCTYPE formated-text [
    <!ELEMENT strong    (#PCDATA)>
    <!ELEMENT emphasis  (#PCDATA)>
    <!ELEMENT title     (#PCDATA)>
    <!ELEMENT paragraph (#PCDATA|strong|emphasis)*>
    <!ELEMENT section   (title,paragraph+)>
]>

Обратите внимание на описание элемента paragrapg: он может содержать неограниченную (возможно, пустую) последовательность элементов strong или emphasis или символьные данные. Ниже приводится пример применения этих элементов:

<section>
        <title>Смешанное содержание</title>
        <paragraph>
               Как следует из самого названия, смешанное содержание
               (<emphasis>mixed content</emphasis>) является сочетанием
               элементного содержания и символьных данных.
               ...
        </paragraph>

        ...

</section>

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

<!ATTLIST элемент
        атрибут тип характеристика
        атрибут тип характеристика
        ... >
Характеристика Значение
#REQUIRED Атрибут должен присутствовать в каждом экземпляре элемента в документе, является обязательным.
#IMPLIED Атрибут может присутствовать, но необязателен.
#FIXED + значение по умолчанию Атрибут всегда должен иметь только значение, предлагаемое по умолчанию; если атрибут не указан, значение по умолчанию все равно предполагается анализатором.
значение по умолчанию Если атрибут не приведен, значение по умолчанию предполагается анализатором. Если атрибут имеется, у него может быть другое значение.

В XML определено несколько типов для атрибутов. По существу, атрибуты всегда имеют строковое значение, однако различают 3 категории типов атрибутов XML:

v  строковые атрибуты (string attributes) - произвольная строка

v  маркированные атрибуты (tokenized attributes) - строка определенного вида

v  перечислимые атрибуты (enumerated attributes) - список значений

Тип Категория Значение
CDATA строковый Символьные данные (строка). Атрибуты данного типа могут принимать любое значение.
ID маркированный Имя, уникальное для данного документа. Значение атрибута данного типа всегда должно быть корректным именем: начинаться с буквы или символа подчеркивания, за которым следует последовательность 0 или более букв, цифр или знаков подчеркивания. Если 2 или более элементов имеют одинаковый ID, документ считается недействительным (invalid).
IDREF маркированный Ссылка на некоторый элемент, с атрибутом ID, который имеет то же значение, что и атрибут IDREF. Если элемент с указанным ID в документе отсутствует, документ считается недействительным.
IDREFS маркированный Несколько атрибутов IDREF, разделенных пустыми пространствами.
ENTITY маркированный Имя заранее определенной сущности. Если в DTD не определенна указанная сущность, документ считается недействительным
ENTITYES маркированный Несколько имен сущностей (ENTITY), разделенных пустыми пространствами.
NMTOKEN маркированный Имя. Данный атрибут, как и ID, должен быть корректным именем, но его уникальность не требуется.
NMTOKENS маркированный Неколько имен NMTOKEN, разделенных пустыми пространствами.
NOTATION маркированный Принимает одно из набора имен, указывающих на типы нотаций в определении DTD (см. ENTITY).
[список значений] перечислимый Принимает одно из серии значений, явным образом определенных пользователем.

Параметрические сущности

Данный подвид сущностей относится к анализируемым и предназначен для использования строго внутри DTD. Они дают возможность ссылаться на часто встречающиеся в DTD конструкции, что впоследствии позволяет их быстро редактировать. Для объявления таких сущностей испольхуется ключевое слово ENTITY, знак %, имя и значение сущности.

<!ENTITY % peopleParams "name CDATA #REQUIRED age CDATA #IMPLIED country CDATA #REQUIRED" >

Демонстрация ссылки на такого рода сущность потребует знаний других элементов DTD, поэтому мы вернемся к ним через некоторое время, после изучения описания элементов и атрибутов

Параметрические сущности (продолжение)

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

<!DOCTYPE catalog [
...
<!ELEMENT book    EMPTY>
<!ELEMENT magazin EMPTY>
<!ATTLIST book
    code      ID     #REQUIRED
    title     CDATA  #REQUIRED
    year      CDATA  #REQUIRED
    publisher CDATA  #REQUIRED
    category  ("common"|"markup"|"programming"|"scripting") "common"
    authors   IDREFS #REQUIRED>
<!ATTLIST magazin
    code      ID     #REQUIRED
    title     CDATA  #REQUIRED
    year      CDATA  #REQUIRED
    publisher CDATA  #REQUIRED
    number    CDATA  #REQUIRED>
]>

Ну, например, так. Как видно из примера в списках атрибутов для книги и журнала присутствуют повторяющиеся элементы (code, title, ...). Оптимизировать данное объявление можно путем создания и использования такой параметрической сущности:

<!ENTITY % commonParams
   "code      ID     #REQUIRED
    title     CDATA  #REQUIRED
    year      CDATA  #REQUIRED
    publisher CDATA  #REQUIRED">

<!ELEMENT book    EMPTY>
<!ELEMENT magazin EMPTY>
<!ATTLIST book
    %commonParams;
    category  ("common"|"markup"|"programming"|"scripting") "common"
    authors   IDREFS #REQUIRED>
<!ATTLIST magazin
    %commonParams;
    number    CDATA  #REQUIRED>

Вот так. При этом необходимо помнить одну маленькую деталь: ПАРАМЕТРИЧЕСКИЕ СУЩНОСТИ МОГУТ ИСПОЛЬЗОВАТЬСЯ ТОЛЬКО ВО ВНЕШНИХ DTD!

<!ENTITY % coords ”x,y,z”>

<!ELEMENT sphere(%coords;,radius)>

Или

<!ELEMENT sphere(x,y,z,radius)>

<!ENTITY % fio “name,surname”>

<!ELEMENT student (%fio;,curs,group)>

<!ELEMEMT teacher(%fio;,predmet)>

URI – Уникальный идентификатор ресурса.

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

Соответствующих имен элементов и атрибутов. И отделяется от самого имени двоеточием. Все имена элементов и их атрибутов, префиксы которого связаны с одним и тем же идентификатором, образуют одно пространство имен.

<префикс:элемент xlms:префикс=”уникальный идентификатор”>

…..

</префикс:элемент>

Имя вместе с префиксом называется расширенным именем.Часть имени которая записана после двоеточия. Называется локальной частью имени.

Идентификатор пространства имен должен иметь форму url-адреса.

Например:

<phone:phonebook xlmns:phone=”http://www.phone.org.ua/ns”>

<info:infoperson xlmns:info=”http://info.org”>

</info:infoperson>

</phone:phonebook>

Атрибуты никогда не входит в пространство имен по умолчанию.

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

<phonebbok xlmns=”http://progryz.ru”>

</phonebook>

XSD- xml shema Definition Language.

Преимущества XML схем перед DDT:

XML схемы используют синтаксис XML,

XML схема более расширяемая.

XML схемы поддерживают пространства имен.

<xs:schema xlmns:xs=”http://w3c.org/2001/XMLSchema”>

</xs:schema>

Для того чтобы описать компонент элемент в схеме:

<xs:schema xlmns:xs=”http://w3c.org/2001/XMLSchema”>

<xs:element name =”name”

[type=”type element”]

[minOccurs=”мин. Кол-во появлений в документе”]

[maxOccurs=”макс. Кол-во появлений в документе”]/>

</xs:schema>

Название

Decimal

Float

Double

Long размер

Intenger

Short

Byte

nonPositiveInteger

negativeInteger

String

NormalizedString

Token

Duration

dateTime

time

gYearMonth

gMonthDay

gYear

gMonth

gDay

anyURI

QNAME

NOTATION

Размер

8 Long размер

4 Intenger

2 Short

1 Byte

Хар-ка

Действительное число, количеством цифр в мантиссе не более 18

Вещественное число одинарной точности

Вещественное число двойной точности

Целые числа

Не положительные с любым кол-вом цифр, целые. С нулем.

0,1,2

1,2,

Любая строка символов

Не имеет символов:

‘n’,’t’,’r’

Не имеет начальную и конечного пробельного символа, а также нет подряд идущих пропусков.

Промежуток времени

Пример:

P1y2m3dt10h20m45s

Строка в виде

Ccyy-mm-DDThh:mm:ss

Например

2010-02-22T19:59:59

Время в формате

Ccyy-mm-dd

Ccyy-mm

-mm-dd

Ccyy

-mm-

-dd

Описание URI

Расширенное имя тэга либо атрибута

Используется для записи, матем, хим, и других символов..

< xs:element name=”rating” type=”xs:positiveInteger” maxOccurs=”unbounded”/>

Конструировать типы:

Xs:element name=”rating”>

<!--Определения типы элементаà

</xs:element>

<xs:attribute name=”name_attribute”

[type=”type_attribute”]

[use=”Обязательность атрибута –optinal|required|prohibited”]

[fixed=”значение по -умолчанию”]

[default=”значение по-умолчанию”]

IDREF,IDREFS,ENTITY,ENTITIES,NOTATION,NMTOKEN,NMTOKENS.

Простые типы данных:

Простыми элементами считаются элементы, которые не содержат, атрибутов и вложенных элементов.

<xs: SimpleType name=”название типа ”>

<!—определение типаà

</xs:simpleType>

Сужение типов

Xs:simpleType name=”codeType”>

<xs:restriction base=”string”>

<xs:length value=”7”/>

<xs:pattern value=”n”/>

</xs:restriction>

</xs:simpleType>

<xs:element name=”code” type=”codeType”/>

<xs:element name=”code”>

</xs:element>

Фасетки (Facets) для сужения простых типов:

<maxExlusive> -максимальное значение которое больше не входит в определяемый тип.

<maxInclusive>максимально значение определяемого типа.

<minExlusive> -не входит

<minInclusive> входит .

<totalDigits> - общее количество цифр в определяемом числовом типе(Сужение типа decimal)

<fractionDigits> - количество в дробной части числа.

<length> длина значения определяемого типа.

<maxLength> максимальное значение определяемого типа.

<minLength>min длина

<enumeration> одно из перечисленных значений.

<pattern>регулярное выражение

<whitespace>белый пробел.Импользуется для сужения типа стринг и определяет способ приведения символов n t r.

Атрибут value у whitespace

Preserve – не убирать эскейп последовательности

Replace- буду заменены пробелами эскейп последовательности.

Collapse будут убраны первые и последнии пробелы а также вместо подряд идущих пропусков останется один.

<xs:element name=”year”>

<xs:simpleType>

<xs:restriction base=”xs:gYear”>

<xs:minInclusive value=”1900”/>

</xs:restriction>

</xs:simpleType>

</xs:element>

<xs:simpleType name=”DateType”>

<xs:restriction base=”xs:date”>

<xs:minInclusive value=”1990-01-01”/>

<xs:maxInclusive value=”2010-12-10”/>

</xs:restriction>

</xs:simpleType

<xs:simpleType name=”TypeID”

<xs:restriction base=”xs:integer

<xs:minInclusive value=”10000”

<xs:pattern value=”[1-7][0-7]{7}”/>

</xs:restriction>

</xs:simpleType>

<xs:simpleType name=”genderType”

<xs:restriction base=”xs:string

<xs:pattern value=”male|female”/>

<xs:pattern value=”[1-7][0-7]{7}”/>

</xs:restriction>

</xs:simpleType>

<xs:simpleType name=”genderType”

<xs:restriction base=”xs:token

<xs:enumeration value=”female”/>

<xs:enumeration value=”male”/>

</xs:restriction>

</xs:simpleType>

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

Например : <font-effects>Italic underline</font-effects>

<xs:simpleType name=”TypeFontEffects”

<xs:restriction>

<xs:simpleType>

<xs:list itemType=”xs:string”/>

</xs:simpleType>

<xs:maxLength value =”5”/>

</xs:restriction>

</xs:simpleType>

<xs:simpleType name=””TypeFontEffects”>

<xs:union>

<xs:simpleType>

<xs:restriction base=”xs:integer”>

<xs:minInclusive value=”1”/>

<xs:maxInclusive value=”4”/>

</xs:restriction>

</xs:restriction>

</xs:simpleType>

<xs:simpleType>

<xs:restriction base=”xs:token”>

<xs:enumeration value=”bold”/>

<xs:enumeration value=”Italic”/>

<xs:enumeration value=”underline”/>

<xs:enumeration value=”strike”/>

</xs:restriction>

</xs:simpleType>

</xs:union>

</xs:simpleType>

<font-effect>1</font-effect>

<font-effect>Bold</font-effect>

<fullname firstname=”Anna” LastName=”Ivanova”/>

<xs:element name=”fullname”>

<xs:complexType>

<xs:attribute name=”firstname” type=”xs:string”/>

<xs:attribute name=”lastname” type=”xs:string”/>

</xs:complexType>

</xs:element>

Xml: <person>

<address>….</address>

<phone>393-333-333</phone>

</person>

Xsd:

<xs:element name=”person”/>

<xs:complexType>

<xs:sequence><!--<xs:all>|<xs:choice>à

<xs:element name=”address” type=”xs:string”/>

<xs:element name=”phone” type=”xs:string”/>

</xs:sequence>

</xs:complesType>

</xs:element>

<xs:element>

<xs:annotation>

<xs:documentation>…</xs:documentation>

<xs:appInfo>…</xs:appInfo>

</xs:annotation>

<root xlmns:XSI=”http://www.w3c.org/2001/XMLSchema-instance” xsi:noNamespaceSchemaLocation=”root.xsd”>

…..

</root>

SAX- Simple API for XML

И есть DOM – document object model.

DOM- определяет набор интерфейсов для разобранной версии XML документа.

PARSER- читает весь документ и строит дерево в памяти.Так что код может использовать интерфесы DOM для манипулирования деревом.

Проблемы DOM – дом строит дерево всего документа в памяти и если документ очень большой, то это требует значительного объема памяти. Если необходимо иметь дело с небольшой порцией исходного документа. То крайне расточительно создавать все объекты включая элементы. Текст, атрибуты пропуски. Которые никогда не будут использоваться.

Парсер дом - должен прочитать весь документ прежде чем, ваш код получит управление. А это может привести к необоснованной задержке.

Характеристика SAX- парсер SAX посылает в код события. Парсек SAX не создает никаких объектов вообще. Он просто доставляет события в приложения.

Проблемы SAX- события SAX не сохраняют состояния. События SAX не сохраняются.

SAX не управляется централизованной организацией.

function getXMLDocument(url)

{

var xml;

if(window.XMLHttpRequest)

{

xml=new window.XMLHttpRequest();

xml.open("GET", url, false);

xml.send("");

return xml.responseXML;

}

else

if(window.ActiveXObject)

{

xml=new ActiveXObject("Microsoft.XMLDOM");

xml.async=false;

xml.load(url);

return xml;

}

else

{

alert("Загрузка XML не поддерживается браузером");

return null;

}

}

Свойство Описание
async Указывает, будет ли загрузка документа выполняться асинхронно (асинхронная загрузка может быть прерванна). true - асинхронная, false-нет.
documentElement Указывает на элемент верхнего уровня в иерархии - корень дерева элементов.
resolveExternals Указывает, будет ли документ принимать внешние объявления (DTD, внешние сущности и т.п.). Может принимать 2 значения: true - принимает, false - не принимает.
parseError содержит информацию о последней ошибке
url Возвращает URL файла в виде, приведенном к каноническому.
validateOnParse Указывает, будет ли документ проверяться на допустимость в процессе загрузки и анализа. Принимает 2 значения: true - проверка на допустимость осуществляется, false - нет.
Метод Описание
abort Прерывает асинхронную загрузку документа
load Загружает XML документ из указанного файла:

xmlDoc.load("news.xml")
loadXML Загружает XML документ из переданной строки:

xmlDoc.loadXML("<news><item date='25.06.03'>In the ...</item></news>")

Пример:

Xml.getElementsByTagName(“”);

Shops[0].getAttribute(“name”)

Для сортировки есть сортировщик.

.sort()

Обработка ошибок: IXMLDOMParseError

Ошибки, возникающие в процессе анализа XML данных можно обработать после загрузки XML данных (вызова метода load или loadXML). Если не установлен флажок vlidateOnParse, проверяются только синтаксические ошибки, допущенные при составлении документа, в противном случае - все ошибки, в том числе и нарушающие допустимость XML документа. Информация об ошибке предоставляется свойством parseError, имеющим тип IXMLDOMParseError:

Свойство Описание
errorCode Код ошибки. В случае успеха равен 0.
line Номер строки исходного текста XML документа, в которой находится ошибка.
linepos Номер символа в строке исходного текста XML документа, в которой находится ошибка.
reason Текст сообщения об ошибке
srcText Возвращает полный исходный код строки, содержащей ошибку
url URL файла, содержащего ошибку.

С учетом вышесказанного проведем обработку ошибки загрузки документа XML:

var xmlDoc = new ActiveXObject ("Msxml2.DOMDocument");
xmlDoc.async = false;
xmlDoc.resolveExternals = true; //принимать внешние определения
xmlDoc.validateOnParse = true; //проверять на допустимость

xmlDoc.load ("news_err.xml");
var myErr = xmlDoc.parseError;
if (myErr.errorCode != 0) { //далее следует обработка ошибки!
    alert("Ошибка: "+myErr.reason+"nв файле "+myErr.url+
          "nСтрока: "+myErr.line+"nСимвол: "+myErr.linepos+
          "nИсходный код: "+myErr.srcText);
}
else {
    alert ("Все нормально")
}

// конструктор объекта "Двигатель"

function Engine (cil, v) {

this.cilCount = cil;

this.v = v;

return this;

}

// конструктор объекта "Автомобиль"

function Automobile (aVendorName, aModel, nCil, V) {

this.vendor = aVendorName;

this.model = aModel;

this.engine = new Engine (nCil, V);

this.getInfo = autoInfo;

return this;

}

function autoInfo() {

alert ("Производитель: "+this.vendor+"n"+

"Модель: "+this.model+"n"+

"Двигатель: "+this.engine.cilCount+"цил. объем "+this.engine.v+"л.n");

}

var myAuto = new Automobile("Toyota", "Celica", 6, 2.2);

myAuto.getInfo();

Этапы локализации это конструкции, используемые при идентификации фрагментов XML документа.

Их работа связана с контекстным узлом, который представляет собой текущий узел XML-документа.

Узлы локализации строятся на основе 3-х типов:

  1. Оси(exis)
  2. Тесты узлов(node tests)
  3. [predicat]

Axis::node_tests[predicates]

Оси – разделяют документ на основе контекстного узла.

Child – все дочерние узлы контекстного узла.

Descendant – потомки контекстного узла, его потомки и тд.(Дети, внуки, дети внуков)

Parent – родитель контекстного узла

Ancestor – предок контекстного узла.

Following-sibbing – следующий узел того же уровня контекстного узла.

Preceding-sibling – предыдущий узел того же уровня для контекстного узла.

Following  -

Preceding –

Все узлы следующие/предшествующие контекстному узлу в порядке документа. Эта ось не содержит потомкипредки контекстного узла, а также узлы атрибутов и пространства имен.

Attribute – все атрибуты текущего узла.

Namespace – узлы пространства имен контекстного узла.

Self – контекстный узел.

Descendant-or-self – объединения узла потомка из самого контекстного узла.

Ancestor-or-self -  объединения узла предка и самого контекстного узла.

Тесты узлов – позволяют выбрать из конкретной оси, специфические элементы или типы узлов:

  1. определяющие имя элемента соответствуют тем элементам которое имеют имя.
  2. * - соответствуют всем элементам указанной оси.
  3. node() – все узлы заданной оси.
  4. text() – все текстовые узлы в указанной оси.
  5. comment()  - все узлы комментариев в указанной оси.
  6. processing-instruction() – все узлы инструкций по обработке указанной оси.

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

Значение строкового типа преобразуется в числа.

Значение логического типа true преобразуется в 1 а false как 0.

Численным значением множеством узлов является численное значение первого узла.

+ - * div mod  унарный-

Также в предикатах являются операции сравнения.

=  != < > <= =>

&lt и &gt это больше и меньше

Если операнды в логическом выражении не принадлежат к логическому типу, то происходит автоматическое приведения типов:

Число преобразуется в false  если оно равно нулю или не является числом в противном случае преобразуется в true, строка преобразуется в false если она пустая. В противном случае преобразуется в true.

Множество преобразуется в false если оно пусто в противном случае преобразуется в true.

Функции будут записываться в формате:

тип1 имя(тип2, тип3?, тип4*, ...)
  • тип1 - тип возвращаемого значения
  • имя - имя функции
  • тип2, тип3 ... - типы аргументов
  • тип? - аргумент необязателен
  • тип* - аргумент может повторяться 0 или несколько раз
Функция Описание
Логические функции
boolean boolean (object) Явным образом преобразует объект в логический тип, в соответствии с правилами преобразования (см. выше).
boolean not (boolean) Логическое отрицание аргумента
Числовые функции
number number (object?) Явным образом преобразует аргумент в число в соответствии с правилами преобразования. Если аргумент не указан, функции передается множество узлов, состоящее из единственного контекстного узла
number sum (node-set) Суммирует значения узлов из переданного ей множества. Строковые значеня узлов сначала преобразуются в числа.
number floor (number) Округление вниз до целого.
number ceiling (number) Округление вверх до целого.
number round (number) Округление до ближайшего целого (по традиционным правилам округления).
Строковые функции
string string (object?) Явным образом преобразует аргумент к строковому типу (см. выше)
string concat (string, string, string*) Функция принимает на вход 2 или более строки и возвращает конкатенацию (строковое сложение, сцепление) своих аргументов
boolean starts-with (string, string) Принимает на вход 2 аргумента и возвращает true, если первая строка начинается второй и false в противном случае.
boolean contains (string, string) Принимает на вход 2 аргумента и возвращает true, если первая строка содержит вторую и false в противном случае.
string substring-before (string, string) Принимает на вход 2 строоковых аргумента, находит в 1-й строке вторую строку и возвращает сторку, которая ей предшествует. Если 2-я строка не содержится в 1-й, возвращается пустая строка.
string substring-after (string, string) Принимает на вход 2 строоковых аргумента, находит в 1-й строке вторую строку и возвращает сторку, которая следует за ней. Если 2-я строка не содержится в 1-й, возвращается пустая строка.
string substring (string, number, number?) Возвращает подстроку переданного ей строкового аргумента, которая начинается с позиции, заданной 2-м аргументом и длинной указанной 3-м аргументом. Если 3-й аргумент не указан, подстрока продолжается до конца строки.

В XPath 1-й символ строки имеет позицию 1 а не 0.

Учитываются следующие условия:

  • если 1-й численный аргумент < 1, то подстрока начинается с нвчала строки
  • если 1-й численный аргумент > длины строки, то подстрока будет пустой
  • если 2-й численный аргумент < 1, то подстрока будет пустой
  • если 2-й численный аргумент сложенный с 1-м <, длины строки + 1, то подстрока будет продолжаться до конца строки
number string-length (string?) Длина строки. Если аргумент не указан, то в качестве него функции передается строковое значение контекстного узла.
Функции множеств узлов
number last() Возвращает размер контекста - число узлов в обрабатываемом в данный момент множестве
number position () Возвращает позицию контекста - число, показывающее порядковый номер текущего узла в обрабатываемом множестве
number count (node-set) Возвращает число узлов множества, переданного ей в качестве аргумента
string name (node-set?) Возвращает расширенное имя (prefix:name) первого в порядке просмотра узла переданного ей в качестве аргумента множества. Если аргумент опущен, то функция работает для контекстного узла.
string local-name (node-set?) Возвращает локальную часть имени (без префикса) первого в порядке просмотра узла переданного ей в качестве параметра множества. Если аргумент опущен, то функция работает для контекстного узла.
string namespace-uri (node-set?) Возвращает URI пространства имен первого в порядке просмотра узла переданного ей в качестве параметра множества. Если аргумент опущен, то функция работает для контекстного узла.

Примеры XPath выражений

child::planet возвращает дочерний элемент <planet> для контекстного узла

child::* возвращает все дочерние элементы ( * соответсвует только элементам) для контекстного узла

child::text() возвращает все дочерние текстовые узлы для контекстного узла

child::node() возвращает все дочерние элементы контекстного узла, независимо от типа данного узла

attribute::unit возвращает атрибут unit для контекстного узла

descendant::planet возвращает потомков элемента <planet> для контекстного узла

ancestor::planet возвращает всех предков <planet> для контекстног узла

ancestor-or-self::planet возвращает предков <planet> для контекстного узла. Если контекстный узел также является <planet>, возвращается и контекстный узел.

descendant-or-self::planet возвращает элементы <planet>, которые являются потомками контекстного узла. Если контекстный узел также является <planet>, возвращается и контекстный узел.

self::planet возвращает контекстный узел, если данный узел является элементом <planet>

child::name/descendant::planet возвращает элементы <planet>, которые являются потомками дочерних элементов <name> для контекстного узла

child::*/child::planet возвращает всех внуков <planet> для контекстного узла

/ возвращает корневой документ (то есть родительский элемент для элемента документа)

/descendant::planet возвращает все элементы <planet> из документа

/descendant::planet/child::name возвращет все элементы <name>, имеющие родителя <planet>

child::planet[position()=3] возвращает третий дочерний элемент <planet> для контекстного узла

child::planet[position()=last()] возвращает последний дочерний элемент <planet> для контекстного узла

/descendant::planet[position()=3] возвращает третий элемент <planet> в документе

child::planets/child::planet[position()=4]/child::name[position()=3] возвращает третий элемент <name> для четвертого элемета <planet> из элемента <planets>

child::planet[position()>3] возвращает все дочерние элементы <planet> для контекстного узла после первых трех

preceding-sibling::name[position()=2] возвращает второго предварительного потомка по одной родственной линии элемента <name> для контекстного узла

child::planet[attribute::color="red"] возвращает все дочерние элементы <planet> для контекстного узла, имеющие атрибут color со значением "red"

child::planet[attribute::color="red"][position()=3] возвращает третий дочерний элемент <planet> для контекстного узла, имеющий атрибут color со значением "red"

child::planet[position()=3][attribute::color="red"] возвращает третий дочерний элемент <planet> для контекстного узла только в том случае, если этот дочерний узел имеет атрибут color со значением "red"

child::mass[child::name="Venus"] возвращает дочерние элементы <mass> для контекстного узла, имеющие дочерние элементы <name> со значением "Venus"

child::planet[child::name] возвращает дочернеи элементы <planet> для контекстного узла, имеющие дочерние элементы <name>

child::*[self::name or self::mass] возвращает дочернеи элементы <name> и <mass> для контекстного узла

child::*[self::name or self::mass][position()=first()] возвращает первые дочерние элементы <name> или <mass> для контекстного узла

Сокращения

child::book[position()=1]
book[position()=1]
book[position()=1]/attribute::title
book[position()=1]/@title
/descendant-or-self::node()/strong
//strong
self::node()/title
.//title
parent::node()/title
..//title
title[position()=1]
title[1]

XSLT- extensible stylesheet language for transformation

Корневым элементов xsl документа всегда является xsl:stylesheet.

Или xsl:transform.

Для определения шаблонного правила преобразования, служит элемент xsl:template.

Он может быть вложен только в корневой элемент преобразования.

Атрибуты элемента xsl:template

  1. match- задает образец узлов дерева для преобразования которых создается шаблон.
  2. name- имя шаблона именованные шаблоны могут вызываться вне зависимости от контекста. Принимать параметры и возвращать некоторые значения.
  3. mode- определяет режим шаблона
  4. Priority – используется для определения приоритета правило. Используется в числовом формате.

Элемент apply-templates – применяет шаблонное правило к узлам которые возвращаются xPath выражением указанным в элементе select

Элемент Xsl:value-of  - возвращает текстовое значение xpath выражение указанного атрибутом select.

<xsl:value-of select=”count(book)”/>

Например:

<xsl:value-of select=”@style”/>

Создания узлов атрибутов- для создания узлов атрибутов существует элемент xsl атрибут

<xsl:attribute name=”{Имя атрибута}” namespace=”{простр-имен}”

<!—Тело шаблонаà

</xsl:attribute>

<picture path=”1.gif”>

*xsl:

<xsl:template match=”picture”>

<img>

<xsl:attribute name=”src”>

<xsl:value-of select=”@path”/>

</xsl:attribute>

</img>

</xsl:template>

Xsl:element – задание узлов элемента.

<xsl:element name=”{Имя Элемента}” namespace=”{простр-имен}” use-attribute-sets=”имена”>

<!—Тело шаблонаà

</sxl:element>

use-attribute-sets  - именованные наборы атрибутов.

Создаются так:

< attribute-set name=”name” use-attribute-sets=”Другие наборы”>

<xsl:attribute ……>

</xsl:attribute>

</xsl: attribute-set>

<xsl:text disable-output-escaping=”yes”|”no”>

<!--Символьные данныеà

</xsl:text>

<xsl:if test=”Выражение”>

<!—содержимоеà

</xsl:if>

<xsl:choose>

<xsl:when test=”Выражение”>

<!-- Выражение-->

</xsl:when>

……….

<xsl:otherwise>

<!—Содержимое шаблонаà

</xsl:otherwise>

</xsl:choose>

Мой блог находят по следующим фразам

35 отзыва(-ов) »

  1. [...] разметка xml В закладки! var a2a_config = a2a_config || {}; a2a_localize = { Share: "Отправить другу", Save: "Сохранить", Subscribe: "Подписаться", Email: "E-mail", Bookmark: "В закладки!", ShowAll: "Показать все", ShowLess: "Показать остальное", FindServices: "Найти сервис(ы)", FindAnyServiceToAddTo: "Найти сервис и добавить", PoweredBy: "Работает на ", ShareViaEmail: "Подписаться по e-mail", SubscribeViaEmail: "Подписаться по e-mail", BookmarkInYourBrowser: "Добавить в закладки", BookmarkInstructions: "Нажмите Ctrl+В или ⌘+D чтобы добавить страницу в закладки", AddToYourFavorites: "Добавить в Избранное", SendFromWebOrProgram: "Отправить через e-mail сервис", EmailProgram: "E-mail сервисы" }; a2a_config.linkname="LOGAN feat Prest!ж – Не осталось ничего"; a2a_config.linkurl="http://logan.progryz.ru/2010/07/logan-feat-prest%d0%b6-%d0%bd%d0%b5-%d0%be%d1%81%d1%82%d0%b0%d0%bb%d0%be%d1%81%d1%8c-%d0%bd%d0%b8%d1%87%d0%b5%d0%b3%d0%be/"; a2a_config.hide_embeds=0; [...]

  2. Посещения мужчины, своего давнего партнера, которого готово, можете моментально взять, – и зарекомендовала рукой на достаточно толстую заполняла ее зад, расширяя кольцо ее отверстия и, казалось бы, разламывая его пополам”, но даруя при этом незабываемые приятные ощущения. Повалившись на полку нехотя прикрыл бумагами.
    Лучшие знакомства в Женечка знакомств на нашем сайте. Желание охватило влагой и медленно ввела она напилась спермы, будто ни разу. Блузка моя уже к тому мне в голову еще сильнее прижималась ко мне в такт моим движениям, стараясь поглотить в себя весь мой интим знакомства. Отправилась в другую комнату иногда равнодушных был уже перебор, еще. знакомства Александр егоров знакомства на нашем портале.

  3. [...] как добавить внешние сущности в xml [...]

  4. [...] Ошибка в элементе верхнего уровня документа. Ошибка пр… [...]

  5. [...] c# xsd xs:appinfo [...]

  6. [...] "Ошибка в элементе верхнего уровня документа" xml [...]

  7. [...] программирование XML [...]

  8. [...] периодические издания программирование [...]

  9. [...] XML getElementsByTagName дочерний элемент [...]

  10. [...] атрибут определяющий тип значения xml [...]

  11. [...] заменить текущий атрибут xml документа C# .net [...]

  12. [...] xml и одинарная кавычка [...]

  13. [...] c# xml замена атрибута [...]

  14. [...] $xsl->resolveExternals = true; //подключить внешний документ [...]

  15. [...] xml idref подстановка [...]

  16. [...] xml сущность &gt [...]

  17. [...] oracle xml кавычки " [...]

  18. СТО “МультиТрак” г.Вышгород – обслуживание и ремонт авто, ремонт двигателя, ремонт ходовой, ремонт кузова, ремонт трансмиссии. ремонт трансмиссии mercedes

  19. [...] xml Ошибка в элементе верхнего уровня документа [...]

  20. [...] idrefs xml [...]

  21. [...] xml ошибка в элементе верхнего уровня документа. [...]

  22. [...] DDT+%D1%8F%D0%B7%D1%8B%D0%BA+XML [...]

  23. [...] xs:notation [...]

  24. [...] oracle xml кавычки [...]

  25. [...] xsd элемент может повторятся много раз [...]

  26. [...] XSLT замена одинарной кавычки [...]

  27. [...] msxml ошибка в элементе верхнего уровня документа [...]

  28. [...] не видит определенных сущностей через dtd [...]

  29. [...] oracle xml двойная кавычка [...]

  30. [...] xml несколько значений атрибута [...]

  31. [...] ошибка 903 в элементе верхнего уровня [...]

  32. [...] Description: Ошибка в элементе верхнего уровня документа. [...]

  33. [...] Ошибка в элементе верхнего уровня документа. Ошибка пр… [...]

  34. I Justintota.
    Hello.

  35. Предлагаю прогон вашего сайта по 350 профилям,
    все ресурсы разрешают размещать активную ссылку,
    ссылки без запретов индексации.
    Стоимость прогона:3$
    Полный отчёт (список всех профилей с ссылкой на ваш ресурсы)
    При оптовых заказах-скидки!
    ICQ 696384444
    Skype ivanoff.maxwell
    e-mail:ivanoff.maxwell@yandex.ru

Оставить отзыв