Знак рубля и XHTML 1.0 Strict. Что общего?

    Речь пойдёт о Document Type Definition (или DTD, <!DOCTYPE ...> короче говоря).
    На пути к совсем семантической вёрстке, нам понадобится DTD или же стандарт XML Schema. В данной статье я рассмотрю первое и покажу, как с помощью 2 строк и одного CSS-стиля сделать кроссбраузерный, W3-валидный документ с использованием собственного тэга — <rur>
    Разобравшись с изложенным мною методом, любой может создавать валидные документы с использованием собственных тэгов, которые могут не только сделать макет документа более гибким, но и более семантически-правильным, логичным и понятным, как для роботов, так и для людей, которые будут заниматься дальнейшей его поддержкой.


    Итак, нам требуется внедрить в XHTML свой тэг, который обозначал бы знак рубля. Для того, чтобы страница была одобрена валидатором, она должна быть не только well-formed (Прим.: синтаксически правильной в терминах «XMLSpec»), но и валидной, т.е. составленной в соответствии с дескриптором типа документа, известным, как DTD.
    Я пользуюсь DTD XHTML 1.0 Strict, описание валидных документов для которого можно найти по знакомому URL http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd
    Изучив структуру документа, мы найдём следующие строки:
    1. <!--=================== Text Elements ====================================-->
    2.  
    3. <!ENTITY % special.pre
    4.   "br | span | bdo | map">
    * This source code was highlighted with Source Code Highlighter.

    Эти строки показывают, что в документе могут быть использованы тэги br, span, bdo, map. Наш тэг называется rur. Теперь осталось как-то внедрить его в уже созданный DTD. Стандарт DTD позволяет наращивать дескрипторы типов документов. Я не буду на это останавливаться, а покажу сразу код DOCTYPE-заголовка для валидного XHTML 1.0 — Strict документа:
    1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
    2. [&#60;!ENTITY % special.pre "br | span | bdo | map | rur">
    3. <!ELEMENT rur (#PCDATA)>
    4. <!ATTLIST rur>]>
    * This source code was highlighted with Source Code Highlighter.

    Приведенный код означает, что мы добавляем для сущности special.pre тип тэга rur, который не имеет параметров и может содержать Parsed Character Data.
    Для проверки работоспособности кода, вживим в любой валидный XHTML-макет указанный выше заголовок и следующий код:
    1. Знак рубля (<rur>руб.</rur>) появился в обращении 1 июля 2007 года.
    2.  
    3. <script type="text/javascript">
    4. //<![CDATA[
    5. i=0;
    6. while (true)
    7. {
    8.   var elem = document.getElementsByTagName ('rur')[i]; 
    9.   
    10.   if (!elem) {break;}
    11.   elem.innerHTML = "Р";
    12.   i++;
    13.  
    14. //]]>
    15. </script>
    * This source code was highlighted with Source Code Highlighter.


    JS-код, я думаю вполне понятен — он ищет тэги <rur> в теле документа и подставляет в них контент — букву «Р», которая является графической основой знака рубля. Если у клиента нет JS, то выводится остаётся просто «руб.»
    Да! И совсем забыл CSS для нашего рубля!
    1. /*знак рубля*/
    2. rur
    3. {
    4.   text-decoration: line-through;
    5.   margin: 0.1em;
    6. }
    * This source code was highlighted with Source Code Highlighter.

    Кстати, он у вас может быть совсем другим!
    Вот как-то так. Я думаю, Хабролюди с полна оценят эту скромную работку и поймут её ценность. Спасибо за внимание!
    Для проверки, Вы можете открыть исходный код с моего сервера по адресу: http://www.ridev.ru/valid-rur.htm
    Я намеряно запихнул CSS внутрь, чтобы был один файл.


    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 47

      +2
      Ссылка не открывается.

      Что же это за семантика, где пишется <rur>руб<rur>? Тогда уж писать надо <rur>.

      Кстати, IE не в quirks mode, случаем, страницу отображать будет?
        0
        Действительно не работает! может это хабраэффект? =)
          +1
          Вот и решение «валидного ». спасиб
            0
            Всё поправил! Качайте!
              +2
              валидного noindex (хабрапарсер, знаете ли...)
              +2
              что это вылезло?
              0
              Господа! Извините, пожалуйста за накладки! За хостинг только проплатил :)
                0
                А вообще, это статья, за которую я получил инвайт, и НЛО порекомендовало мне её опубликовать. Вот наконец-то я и сподобился )
                • UFO just landed and posted this here
                    +1
                    это проблема шрифта, а не решения
                    • UFO just landed and posted this here
                        +3
                        Я имею в виду, что то, что у пользователя в мелких кеглях не видна палочка никак не говорит о том, что решение, предложенное в этой статье плохое. А так font-face — наш друг. Годика через 2 вот внедрят его в нормальных браузерах, а через 20 — в ie12, и заживёёёём!..
                        • UFO just landed and posted this here
                            +3
                            но и не должно зависеть от шрифта

                            background-image вам в помощь :D
                              +1
                              Сферический конь в вакууме?
                                +1
                                …но и не должно зависеть от шрифта. Более того, оно должно учитывать особенности шрифты…
                                что-то я запутался: так не зависеть от шрифта или учитывать его особенности?
                                • UFO just landed and posted this here
                                +2
                                Font-face поддерживается в «нормальных браузерах» начиная с версий: Firefox 3.5, Google Chrome 2, Opera 10 и Safari 3.1
                                В Internet Explorer font-face поддерживается с версии 4.0.
                                  +1
                                  Поддерживаться-то поддерживается, но на рынке относительно приличная доля только у лиса и сафари, опера 10 и хром всех версий занимают незначительную долю рынка. Когда на рынке будет хотя бы 70-80 % браузеров, поддерживающих это свойство, тогда можно принимать его как дефолтное, а пока, увы, только как бонус для владельцев новейших браузеров.
                                    –3
                                    Наводящий вопрос: а как насчёт Internet Explorer? Разве он вместе с лисою и сафарею не занимает желаемую долю рынка?
                                      +1
                                      Там другой формат шрифта, который поддерживает он и только он.
                                        –1
                                        Ну да и пёс бы с ним. Один файл подсунуть Эксплореру, другой остальным.

                                        John Daggett даже сочинил питоновый скрипт, способный преобразовывать TTF в EOT Lite.

                                        (Правда, приятно, что я нашёл способ использовать HTML на Хабрахабре, даже обладая отрицательной кармою? Без этого слово «сочинил» мне никак не удалось бы сделать гиперссылкою. Хак-хак!)
                        • UFO just landed and posted this here
                        +3
                        Валидный-то он валидный, но человеку, который будет поддерживать код после вас придётся как минимум лезть в тех. документацию (если она есть) или в сам DTD. А DTD ещё надо уметь читать, чтобы в нём что-то понять. Вот и останется в итоге очень многим верстальщикам и программистам или верить в шайтан-разметку, которая вроде и невалидная, и валидацию проходит, или учить матчасть. Стандарт отчасти и хорош тем, что известен всем, а свои «типы данных, определяемые пользователем» добавляют геморроя при поддержки кода.
                          0
                          Полностью согласен. Пост на тему возможностей DTD и XHTML был. И DTD в конце концов тоже стандарт. А собственный тэг от дива ничем и не отличается.
                            +1
                            Я вот сегодня с утра задумался над Вашей статьёй на тему а почему у нас всё ещё нет (X)HTML-фреймворков? CSS есть, JS есть, Flash есть, PHP есть, Ruby есть (далее продолжать по вкусу), а про HTML я ни разу не слышал. Да, я знаю, что есть XML, но скормить ослику XML немного трудновато, поэтому я говорю именно про (X)HTML-фреймворк. Как вы считаете?
                              +3
                              Потому что к (X)HTML коду у всех отношение с позиции дизайнеров, верстальщиков, нерадивых блоггеров, антисемитов, лебедевозавистников,… — какое угодно, только не отношение с позиции Разработчика Гипертекстового Документа.

                              Во времена www.1-9-9-4.ru HTML был наиболее близок к Гипертекстовым Документам. Если Вы зайдёте на этот сайт и посмотрите код (не обращая внимание на особенности репродукции сайта студией Атилект), то поймёте почему я так говорю! Потому что список это список, ссылка это ссылка, только таблицы подкачали.

                              Вроде бы DIV должен был сделать почти переворот, но…

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

                              HTML — это язык разметки Гипертекста. Сейчас он становится языком разметки графических пользовательских интерфейсов (GUI).

                              Создатели браузеров не стали развивать свои движки или диктовать новые стандарты, они просто реализовали возможность вставки в любое место документа блока с картинкой. Осёл вообще крут! Можно даже анекдоты через ActiveX отрисовывать! тогда пользователи других операционных систем не будут понимать юмора.

                              Как решаются проблемы графических пользовательских интерфейсов в оконных оболочках? Каждый элемент имеет некоторую область отрисовки, в которую отрисовывается скин этого элемента. Так работают все без исключения оконные системы, так работает банальный Winamp и прочие. Так делаются интерфейсы в компьютерных играх — у них даже больше возможностей, т.к. работают на трёхмерном графическом движке и имеют полный доступ к возможностям современных GPU.

                              В изначальном HTML не было ничего предусмотрено для «натягивания» скинов на элементы, а всё, что сейчас делается верстальщиками это сплошь хаки. То, что существует свыше 2 десятков вариантов создания скругленных краёв у блоков — живой тому пример.

                              То есть, я считаю, что требуется расширение стандарта в плане добавления новых возможностей работы с графикой, в том числе с векторной. SVG должен быть буквально native для (X)HTML. Но здесь мы пересекаемся с интересами разработчиков браузеров, которым нравится делать убогие программные продукты. А разработчики из Opensource сообществ окажутся не в состоянии справляться с растущими требованиями стандартов. В результате довольны тем, что имеем, и верим в приход «семантического веба», верим в то, что имеем это веб 2.0 и всё такое прочее.
                            +2
                            Объясниет, пожалуйста, зачем придумывать тег rur, потом с помощью Javascript записывать в него Р и стилизовать через CSS? Нельзя сразу (например, с помощью span) отобразить так, как нужно?

                            Или тут знак рубля используется в качестве примера, а вся фишка — в добавлении собственного тега в DTD?
                              +5
                              Вся фишка именно в DTD, а знак рубля это затравка :)
                              +2
                              это скорее знак Темы появился, а знак рубля так до сих пор и не принят.

                              По состоянию на 1 сентября 2009 конкретного решения о знаке рубля Банк России не принял.
                                –3
                                И правильно, что Банк России не принял знак, продвигаемый еврейским расовым дизайнером Лебедевым, по прямой материнской линии происходящем вот от этого иудея:

                                [Лозинский в иудейском головном уборе]

                                Такое принятие было бы оголтелым филосемитизмом.

                                Сперва евреи, взяв власть в 1917 году, напрочь лишили русский народ буквы «ять» в алфавите (а с нею и соответствующего звука русской речи) — буквы, увенчанной христианским крестом сверху (по крайней мере в некоторых начертаниях и гарнитурах) — а теперь ещё желают заставить эту букву послужить не Богу, а маммоне, быть зеркально отражённою книзу и оканчиваться перевёрнутым крестом диаволопоклонников?
                                  0
                                  А Вы поклоняетесь Христу? Давно это у Вас?
                                  • UFO just landed and posted this here
                                  +2
                                  Если не ошибаюсь, ещё в 2007 г. Центробанк утвердил официальный знак рубля: «Р.» Этот документ (о принятии знака) видел и читал.
                                  +3
                                  Перечитывая комменты…
                                  Господа, да причём тут шрифты вообще? Речь идёт о семантике!

                                  Почему я поднял такую тему и почему предложил это решение? Да только потому, чтобы вы все обратили внимание на код, который пишете!
                                  Да, для сторонних разработчиков, которые это будут поддерживать, он, может быть, и хорош.
                                  Да, вы отлично верстаете.
                                  Да, вы делаете кросс-браузерную вёрстку и не боитесь IE.
                                  Да, заказчик доволен, потому что он видит красивый, функциональный результат.

                                  Но вы подумайте над тем, как ваш код будет восприниматься машиной! Не той машиной, которая умеет отрисовывать блоки в соответствии с алгоритмом позиционирования, а той машиной, которая будет человеку помогать справляться с огромными массивами данных в ближайшем будущем, которые хранятся в Интернете!

                                  Какой может быть Веб 2.0, если до сих пор нет каких-либо более-менее расширенных стандартов? HTML5? Горизонтальная навигация и футер? Это всё, что компьютеры будут понимать, бродя по веб-страницам?
                                  Некоторые заметят: как же так? ведь есть стандарт WSDL!

                                  И где вы его видели работающим в Интернете? Сервисов, имеющих интерфейс с WSDL единицы! А это просто означает, что многие из нас занимаются не программированием, а написанием сотен и тысяч строк бессмысленного, обёрточного, кода только для того, чтобы вытащить данные с какого-нибудь вонючего сервера погоды или твиттера.

                                  То же и с html-кодом. Насколько поисковые машины адекватны? Да, можно судить по первой странице выдачи — на ней размещены ссылки, на которые кликают пользователи. А дальше? Насколько адекватен результат запросу?

                                  Попробуйте сгенерировать из вики по Twitter API какой-либо вразумительный код (на PHP, Ruby, Perl, Python и т.п.), реализующий просто враппер к этому самому API!

                                  Если бы у Twitter API страницы были свёрстаны в соответствии с определенной семантикой, которая так или иначе была бы либо описана, либо стандартизована, достаточно было бы написать обёртку для XML-парсера и получить все сущности из страниц описания.

                                  Почему, если блок содержит текст сообщения, он называется DIV, а не скажем MESSAGE-TEXT? Что понятнее? Абстрактный Див или тэг с вразумительным названием? Браузеры не понимают? А вот в этой статье я и доказал обратное! Потому что современным браузер пофиг P это или DIV или Q или ещё что-то — он оперирует блоками контента, оформление и позиционирование которых задаётся CSS.
                                    +2
                                      0
                                      Решение интересное, но код мусорный, т.к. добавляются XML-нэймспэйсы. Странно, что я не подумал о таком прямолинейном решении…
                                        0
                                        первый раз слышу, чтобы неймспейсы называли мусором XD
                                      +2
                                      Кстати, во многих браузерах можно обойтись без Javascript, как то так в CSS:
                                      rur {
                                          visibility: hidden;
                                      }
                                      rur:after {
                                          visibility: visible;
                                          margin-left: -1.8em;
                                          content: "P";
                                      }
                                        –1
                                        Спасибо за интерес к топику и за вклад!

                                      Only users with full accounts can post comments. Log in, please.