Створення валідатора розширюваної мови гіпертекстової розмітки (XHTML) Презентація до курсової роботи Гребенюка С.В.
Історія XHTML (англ. Extensible Hypertext Markup Language укр. Розширювана мова розмітки гіпертексту ) мова розмітки, що має таку ж виразну силу як і HTML, але відповідає синтаксичним правилам XML. XHTML 1.0 став рекомендацією консорціуму W3C 26 січня XHTML 1.1 став рекомендацією W3C 31 травня 2001.
Версії XHTML XHTML-1.0-Strict – тип, що не дозволяє використання елементів, що відповідають за графічне відображення документу (напр. ); XHTML-1.0-Transitional – тип, що дозволяє «графічні» елементи; XHTML-1.0-Frameset – це тип, який додатково до можливостей XHTML-1.0- Transitional підтримує фрейми.
Дві популярні техніки парсингу SAX (англ. «Simple API for XML») спосіб послідовного зчитування. Парсер повідомляє програму, що його викликала, про елементи розмітки та помилки. DOM (англ. Document Object Model «обєктна модель документу») – програмний інтерфейс, що дає доступ до змісту XML, XHTML, HTML- документу. Парсер представляє документ у вигляді дерева вузлів, кожен вузол якого є елементом, атрибутом або обєктом.
Реалізація на С++ class XHTMLValidator { struct tag { tag(const string&,string,const bool,const bool); const string _name; list _attributes; const bool _paired,_Inline; }; struct placedTag { string _tag; size_t _line; }; public: static XHTMLValidator& instance(); ~XHTMLValidator(); bool validate(const char* const,const bool=false,const bool=false); }; private: XHTMLValidator(const XHTMLValidator&); XHTMLValidator& operator=(const XHTMLValidator&); list _tags; list _mnemonics; bool valid; void initializeTags(); void initialize(); void initializeMnemonics(); const list & tags() const {return _tags;} list & tags(){return _tags;} const list & mnemonics() const {return _mnemonics;} list & mnemonics(){return _mnemonics;} bool checkTag(const placedTag&,const bool,const bool,ofstream&); bool checkmnemonics(const string&) const; bool pair(const placedTag&,const placedTag&) const; static bool tagpred(const tag&,const tag&); bool ifinline(const placedTag&) const; XHTMLValidator(); };
Переваги синглтонів Гарантовано створиться лише один екземпляр класу Не доводиться думати про порядок створення глобальних обєктів Не доводиться думати про знищення глобальних обєктів
Стратегії проектування синглтонів Creation – спосіб створення обєкту, за якого обєкт створюється під час першого звернення до нього; Lifetime – задає час народження і знищення обєкту; ThreadingModel – задає поведінку указника на обєкт.
Помилки, які фіксує програма Є елементи поза тілом документу Інлайн-елемент має бути всередині блочного Неправильне вкладення тегів або незакритий тег. Інлайнові елементи мають знаходитись всередині блокових Пряме використання символу & замість & або некоректне вжиття мнемоніки Неочікуваний кінець файлу, незакритий тег Блоковий елемент всередині інлайнового Вкладення елементу самого в себе Повторне вжиття якоря (в тезі ) Тег має йти одразу після У тезі DOCTYPE не вказано абсолютний шлях до DTD-файлу (має бути вказаний саме абсолютний шлях, а не шлях до завантаженого файлу) XHTML вимагає вжиття всіх тегів і атрибутів у нижньому регістрі Неіснуючий атрибутXHTML вимагає альтернативний текст для кожного зображення Відсутня закривальна в атрибуті Атрибут без значення Не знайдено тегу Текст поза В документі має бути лише один може містити лише,,,,,,,,,,,,,, можуть бути лише в
Додаткові можливості Опціональний вивід результату на екран Опціональний вивід результату в файл