XSLT - [49]
СЛЕДСТВИЯ ФОРМАЛЬНОГО ОПРЕДЕЛЕНИЯ ОБРАЗЦОВ ВЫБОРА
Приведенное определение образцов в терминах выражений XPath довольно очевидно, но существуют следствия, которые сразу не видны. Например, хотя функция node() определена как функция, выбирающая любой узел, при использовании ее в качестве образца, "node()", в действительности она представляется как "child::node()", как вы увидите позже в этой главе. Помимо прочего, это означает, что образец "node()" может выбирать только дочерние узлы — он никогда не выберет корневой узел. Отметьте также, что нет образцов, которые бы могли выбрать узлы объявлений пространств имен.
W3C дает формальное определение образцов выбора в нотации расширенных форм Бэкуса-Наура (РБНФ), при помощи которой написана и спецификация XML. Объяснение этой грамматики можно найти по адресу www.w3.org/TR/REC-xml (раздел 6). Здесь я привожу формальное определение образцов только для справки. (Разъяснению этого формального определения посвящена целая глава.) В следующем списке приведены используемые здесь лексемы нотации РБНФ:
• >::=
означает «определяется как»;
• >+
означает «один или больше»;
• >*
означает «ноль или больше»;
• >|
означает «или»;
• >-
означает «не»;
• >?
означает «необязательно».
Далее приведено настоящее, формальное определение образцов выбора W3C; когда элемент заключен в одиночные кавычки, как >'child'
или >'::'
, это значит, что элемент должен появиться в образце буквально (как ">child::NAME
"), — такие элементы называются литералами, Literal:
>Pattern ::= LocationPathPattern | Pattern '|' LocationPathPattern
>LocationPathPattern ::= '/' RelativePathPattern?
> | IdKeyPattern ('/' | '//') RelativePathPattern?
> | '//'? RelativePathPattern
>IdKeyPattern ::= 'id' '(' Literal ')' | 'key' '(' Literal '.' Literal ')'
>RelativePathPattern ::= StepPattern | RelativePathPattern '/' StepPattern
> | RelativePathPattern '//' StepPattern
>StepPattern ::= ChildOrAttributeAxisSpecifier NodeTest Predicate*
>ChildOrAttributeAxisSpecifier ::= AbbreviatedAxisSpecifier
> | ('child' | 'attribute') '::'
Определения NodeText (текстового узла) и Predicate (предиката) приводятся в спецификации XPath (>Expr
соответствует выражению XPath, a >NCName
и >QName
были определены в начале главы 2, «Создание и применение таблиц стилей»):
>NodeTest ::= NameTest | NodeType '(' ')' | 'processing-instruction' '(' Literal ')'
>Predicate ::= '[' PredicateExpr ']'
>PredicateExpr ::= Expr
>AbbreviatedAxisSpecifier ::= '@'?
>NameTest :: = '*' | NCName ':' '*' | QName
>NodeType ::= 'comment' | 'text' | 'processing-instruction' | 'node'
Как вы можете видеть, все это больше походит на какой-то код. Давайте начнем его расшифровывать. Во-первых, образец (pattern) состоит из одного (или более) образца пути расположения (location path pattern). Образец пути расположения, в свою очередь, состоит из одного или нескольких образцов шага (step pattern), разделенных / или //, или одним (несколькими) образцом шага в объединении с функциями >id
и >key
(выбирающими элементы с определенными идентификаторами или ключами).
Образцы шага являются строительными блоками шаблонов: в одном пути можно использовать несколько шагов, разделяя их символами / или //, как в образце ">PLANET/*/ NAME
", в котором три шага: ">PLANET
", ">*
" и ">NAME
". Если вы начнете сам образец с символа /, он будет называться абсолютным, так как вы указали образец от корневого узла (как в ">/PLANETS/PLANET
" или ">//PLANET
"); иначе образец называется относительным и применяется начиная с контекстного узла (как в ">PLANET
").
Затем образец шага состоит из оси, условия узла и предикатов (которых может и не быть). Например, в выражении >child::PLANET[position()=5]
, >child
— это имя оси, >PLANET
— условие узла, a >[position()=5]
— это предикат. (Предикаты всегда заключены в квадратные скобки.) Образцы можно создавать при помощи одного или более образцов шага, как, например, образец >/child::PLANET/child::NAME
, который выбирает элементы >
, дочерние по отношению к родителю >
.
Таким образом, чтобы понять работу образцов, вам необходимо понять работу образцов шага, поскольку образцы состоят из одного или более образцов шага, в таких выражениях, как ">step-pattern1/step-pattern2/step-pattern3
…". А чтобы понять работу образца шага, необходимо понять работу деятельности трех составных частей — осей, условий узлов и предикатов, которыми мы и займемся в следующих разделах.
Образцы шага, часть 1: оси образца
Оси — первая часть образцов шага. Например, в образце шага >child::NAME
, ссылающемся на элемент >
, дочерний по отношению к контекстному узлу, >child
называется осью. У образцов две оси:
• ось >attribute
содержит атрибуты контекстного узла;
• ось >child
содержит детей контекстного узла. Если ось явно не задана, ось >child
будет осью по умолчанию.
При помощи осей можно задать шаг расположения (location path) или путь, как в следующем примере, в котором ось >child
используется для задания выбора дочерних узлов контекстного узла, элемента >
:
>
>
>
>
>
>
>

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

Эта книга-шпаргалка для всех рекламщиков и маркетологов на все времена. Основанная на многолетних исследованиях и практическом опыте. Данная книга помогла бесчисленному количеству людей увеличить продажи товаров и услуг, а также оптимизировать рекламный бюджет. В книге вы найдете более 1000 практических советов и рекламных инструментов. После прочтения этой книги: – вы окончательно разберетесь в типах сайтов, их преимуществах и недостатках; – будете иметь огромный список шаблонов продающих заголовков; получите рекомендации касательно написания текстов; – определитесь, какие рекламные инструменты стоит применять в каждой нише.

Книга исследует динамику развития российских идеологических движений в драматический период 2011–2014 гг., когда возникшие в связи с масштабными антиправительственными митингами либеральные надежды вскоре были развеяны реакцией в государственной политике, а также ростом проимперских настроений. Медиа и общество находятся в сложной взаимосвязи отражений и влияний, поэтому данная книга использует двойную призму: Интернет для авторов не только зеркало, но и один из важнейших факторов социальных процессов, оказывающий на последние существенное воздействие.

Эта книга по сути – вовсе не книга, а скорее должностная инструкция, которая призвана регламентировать профессиональную жизнь SMM-менеджера даже за пределами трудодня. В ней буквально почасовое расписание задач на неделю (вопрос «Что?») сменяется полноценным «Как?» и лишь в необходимых случаях «Зачем?».– На предприятии это позволяет руководителю просто вручить сотруднику книгу и время от времени, по ней же, его контролировать.– А тем, кто сам себе SMMщик, – раз и навсегда снять вопрос о системном подходе к своей деятельности.Кроме того, книга выходит далеко за рамки справочника по SMM, так как касается вопросов контекстной рекламы, предлагает некоторые схемы работы в offline, встроенную систему публичной ответственности сотрудника и даже пакет документации, посвященной планированию, отчетности и самомотивации…Книга предназначена для исполнителей сферы SMM (менеджеров, специалистов, фрилансеров, самонанятых предпринимателей), руководителей сферы SMM (директоров, собственников, начальников отделов) – всех тех, кто так или иначе ведет или собирается вести бизнес в социальных сетях и сети Интернет.

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

Рассказывается о ведущем поисковом ресурсе российской части Интернета — Яндексе. Описаны его сервисы для поиска документов и новостей, блогов и адресов, товаров и музыкальных произведений. Рассмотрены почтовый сервис и сервис для создания и размещения сайтов на Народ. ру. Читатель узнает о том, что такое "электронные деньги" и как с их помощью оплатить товар. Большое внимание уделяется общедоступным поисковым программам, которые Яндекс предлагает своим посетителям для поиска информации не только на сайтах, но и на своем компьютере.

Что общего между самыми востребованными профессиями и стремительным увеличением количества информации в мире? Ответ: язык структурированных запросов (SQL). SQL — рабочая лошадка среди языков программирования, основа основ для современного анализа и управления данными. Книга «SQL: быстрое погружение» идеальна для всех, кто ищет новые перспективы карьерного роста; для разработчиков, которые хотят расширить свои навыки и знания в программировании; для любого человека, даже без опыта, кто хочет воспользоваться возможностями будущего, в котором будут править данные.

Даже плохой программный код может работать. Однако если код не является «чистым», это всегда будет мешать развитию проекта и компании-разработчика, отнимая значительные ресурсы на его поддержку и «укрощение». Эта книга посвящена хорошему программированию. Она полна реальных примеров кода. Мы будем рассматривать код с различных направлений: сверху вниз, снизу вверх и даже изнутри. Прочитав книгу, вы узнаете много нового о коде. Более того, вы научитесь отличать хороший код от плохого. Вы узнаете, как писать хороший код и как преобразовать плохой код в хороший. Книга состоит из трех частей.

Алгоритмы - это всего лишь пошаговые алгоритмы решения задач, и большинство таких задач уже были кем-то решены, протестированы и проверены. Можно, конечно, погрузится в глубокую философию гениального Кнута, изучить многостраничные фолианты с доказательствами и обоснованиями, но хотите ли вы тратить на это свое время? Откройте великолепно иллюстрированную книгу и вы сразу поймете, что алгоритмы - это просто. А грокать алгоритмы - это веселое и увлекательное занятие.

Книга "Изучаем Python" - это ускоренный курс, который позволит вам сэкономить время и сразу начать писать работоспособные программы (игры, визуализации данных, веб-приложения и многое другое). Хотите стать программистом? В первой части книги вам предстоит узнать о базовых принципах программирования, познакомиться со списками, словарями, классами и циклами, вы научитесь создавать программы и тестировать код. Во второй части книги вы начнете использовать знания на практике, работая над тремя крупными проектами: создадите собственную "стрелялку" с нарастающей сложностью уровней, займетесь работой с большими наборами данных и освоите их визуализацию, и, наконец, создадите полноценное веб-приложение на базе Django, гарантирующее конфиденциальность пользовательской информации. Если вы решились разобраться в том что такое программирование, не нужно ждать.