Object Graphical Web (OGWeb) – это никакой HTML разметки, никаких CSS-стилей, никаких таблиц и блоков div!
 
Object Graphical Web — это программируемый и повторно используемый Web!
Множество людей корпят — сначала разрабатывают концепцию дизайна сайта и техническое задание, затем рисуют эскизы дизайна, затем верстают шаблоны страниц сайта, затем интегрируют разработанный дизайн в существующую CMS или разрабатывают новую CMS, затем наполняют сайт контентом и наконец публикуют его.
 
Что же мы получаем в итоге?
 
В итоге мы получаем набор плоских страниц в окне браузера, состоящих из элементов контроля и контента, который в свою очередь состоит из текста, изображений, анимации, видео.
 
Где же 21 век?
 
21 век пока виден только в смартфонах и планшетниках, в которых пальцем перелистывают элементы и увеличивают их для просмотра, раздвигая указательным и большим пальцами.
 
Хочу такое же в настольном компьютере или ноутбуке!!!
 
Там правда пальцев как правило нет, но зато есть мышка.
 
Возьмем к примеру честного программиста. Предположим захотел он сделать свой сайт, чтобы продавать свой программный продукт. Это что же — ему надо вместо какого нибудь благородного языка типа Java ковыряться в этой лапше из блоков div и CSS-селекторов? Да еще может быть что нибудь порисовать в Photoshop? - Хватит! Надоело!
 
Из чего же все таки состоит сайт? Может все таки из набора объектов?
 
Элемент контроля — это объект? - объект!
 
Логическая часть текста — это объект? - объект!
 
Изображение или композиция изображений — это объект? - объект!
 
Анимация — это объект? - объект!
 
Видео — это объект? - конечно же объект!
 
Все это объекты, которые можно помещать в различные контейнеры компоновки и которыми можно манипулировать с помощью мышки.
 
Как же все это можно описать и смоделировать?
 
Описать все это можно например с помощью универсального языка XML.
 
На самом деле — скажу Вам по секрету — примеров таких масса!
 
Возьмем JavaFX 2 язык FXML.
 
Как будет выглядеть простая страница приложения? :
 
 
 
 
<?xml version="1.0" encoding="UTF-8"?>
 
<?import java.lang.*?>
 
<?import java.util.*?>
 
<?import javafx.scene.control.*?>
 
<?import javafx.scene.layout.*?>
 
<?import javafx.scene.paint.*?>
 
<?import javafx.scene.web.*?>
 
 
 
 
<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml">
 
<children>
 
<HBox layoutX="14.0" layoutY="14.0" prefHeight="28.0" prefWidth="572.0">
 
<children>
 
<Hyperlink text="Home" />
 
<Hyperlink text="Services" />
 
<Hyperlink text="Blog" />
 
<Hyperlink text="Contacts" />
 
</children>
 
</HBox>
 
<VBox layoutX="492.0" layoutY="53.0" prefHeight="305.0" prefWidth="100.0">
 
<children>
 
<Hyperlink text="Home" />
 
<Hyperlink text="Services" />
 
<Hyperlink text="Blog" />
 
<Hyperlink text="Contacts" />
 
</children>
 
</VBox>
 
<HBox layoutX="14.0" layoutY="358.0" prefHeight="28.0" prefWidth="572.0">
 
<children>
 
<Label text="Copyright" />
 
</children>
 
</HBox>
 
<ScrollPane layoutX="34.0" layoutY="53.0" prefHeight="291.0" prefWidth="445.0">
 
<content>
 
<WebView prefHeight="276.0" prefWidth="430.0" />
 
</content>
 
</ScrollPane>
 
</children>
 
</AnchorPane>
 
 
 
 
Или же возьмем фреймворк UiBinder Google Web Toolkit:
 
 
 
 
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
 
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
 
xmlns:g="urn:import:com.google.gwt.user.client.ui">
 
<ui:style>
 
 
 
</ui:style>
 
<g:HTMLPanel>
 
<g:AbsolutePanel height="300px">
 
<g:at left="0" top="0">
 
<g:HorizontalPanel width="440px" height="34px">
 
<g:Hyperlink text="Home" targetHistoryToken="newHistoryToken"/>
 
<g:Hyperlink text="Services" targetHistoryToken="newHistoryToken"/>
 
<g:Hyperlink text="Blog" targetHistoryToken="newHistoryToken"/>
 
<g:Hyperlink text="Contacts" targetHistoryToken="newHistoryToken"/>
 
</g:HorizontalPanel>
 
</g:at>
 
<g:at left="352" top="40">
 
<g:VerticalPanel width="88px" height="222px">
 
<g:Hyperlink text="Home" targetHistoryToken="newHistoryToken"/>
 
<g:Hyperlink text="Services" targetHistoryToken="newHistoryToken"/>
 
<g:Hyperlink text="Blog" targetHistoryToken="newHistoryToken"/>
 
<g:Hyperlink text="Contacts" targetHistoryToken="newHistoryToken"/>
 
</g:VerticalPanel>
 
</g:at>
 
<g:at left="0" top="271">
 
<g:HorizontalPanel width="440px" height="19px">
 
<g:Label text="Copyright"/>
 
</g:HorizontalPanel>
 
</g:at>
 
<g:at left="0" top="40">
 
<g:HTMLPanel width="346px" height="215px"/>
 
</g:at>
 
</g:AbsolutePanel>
 
</g:HTMLPanel>
 
</ui:UiBinder>
 
 
 
 
Или же возьмем Flex 4:
 
<?xml version="1.0" encoding="utf-8"?>
 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
 
xmlns:s="library://ns.adobe.com/flex/spark"
 
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
 
<fx:Declarations>
 
 
 
 
</fx:Declarations>
 
<s:HGroup x="12" y="6" width="808" height="30">
 
<mx:LinkButton label="Home"/>
 
<mx:LinkButton label="Services"/>
 
<mx:LinkButton label="Blog"/>
 
<mx:LinkButton label="Contacts"/>
 
</s:HGroup>
 
<s:VGroup x="620" y="44" width="200" height="483">
 
<mx:LinkButton label="Home"/>
 
<mx:LinkButton label="Services"/>
 
<mx:LinkButton label="Blog"/>
 
<mx:LinkButton label="Contacts"/>
 
</s:VGroup>
 
<s:HGroup x="10" y="544" width="820" height="46">
 
<s:Label text="Copyright" height="29" width="90"/>
 
</s:HGroup>
 
<s:RichText x="10" y="44" width="602" height="492"/>
 
</s:Application>
 
Что мы видим?
 
Да — это декларативное описание графа объектов. Да — к этим объектам можно присоединять различные эффекты. Да — для этих объектов можно определять различные действия.
 
Но — все это опять какое-то плоское и на самом деле разрозненное. Но - каждый объект нужно украшать индивидуально. Но — в итоге мы все равно получаем всю ту же имитацию HTML-страницы.
 
Какой же может быть из этого выход?
 
Ну, например можно каждый объект поместить в унифицированный 3D-контейнер, к которому можно применять различные эффекты и действия, который можно передвигать по экрану и который можно увеличивать или уменьшать для просмотра содержимого.
 
Таким образом все усилия дизайнеров можно направить на разработку контейнера, а создание сайта сведется к описанию графа контейнеров и его трансляции в код.
 
Вот как это будет выглядеть в JavaFX 2 FXML:
 
<?xml version="1.0" encoding="UTF-8"?>
 
<?import java.lang.*?>
 
<?import java.util.*?>
 
<?import javafx.scene.*?>
 
<?import javafx.scene.control.*?>
 
<?import javafx.scene.layout.*?>
 
<?import javafxogwebfxml.*?>
 
<AnchorPane id="AnchorPane" prefHeight="600" prefWidth="800" xmlns:fx="http://javafx.com/fxml" >
 
<children>
 
<MenuContainer layoutX="50" layoutY="50" label="Home" />
 
<MenuContainer layoutX="160" layoutY="50" label="Services" />
 
<MenuContainer layoutX="270" layoutY="50" label="Blog" />
 
<MenuContainer layoutX="380" layoutY="50" label="Contacts" />
 
<ContentContainer layoutX="100" layoutY="200" url="http://www.google.com/" />
 
</children>
 
</AnchorPane>