Следующее поколение разметки для Web5 и WebAI

Вдохновлён JSON и DSL, безопасен изначально, идеален для ИИ и децентрализованного веба

Веб как разумная сущность начинается здесь.

Что это – и что это НЕ?

JML (JSON-Inspired Markup Language) — инновационный язык разметки, вдохновлённый структурой JSON и принципами DSL, разработанный для Ascoos OS и современного веба.

Его цель — предоставить лёгкую, безопасную и удобную альтернативу традиционному HTML с акцентом на совместимость с ИИ, децентрализацию (Web5) и минимальный синтаксис.

Вкратце

Это

  • DSL-разметка, вдохновлённая JSON
  • На основе AST с самого начала
  • На 16–40% меньше HTML
  • Zero-trust и защищён от XSS
  • Идеален для WebAI / агентов
  • Полная нативная поддержка UTF-8
  • С семантическими макросами и расширениями

Это НЕ

  • Нативная разметка браузера
  • Шаблонизатор (Twig/Pug)
  • Простая замена JSON
  • Язык программирования

JML против HTML – Сравнение 2026

ХарактеристикаJMLHTML5
Размер (Hello World минифицированный)64 символа108 символов
С meta + viewport177 символов212 символов
Среднее сокращение16–40%
Шаблонный кодОтсутствуетDOCTYPE, head, body...
Защита от XSSБезопасно (AST)Зависит от разработчика
Исполняемая логика (макросы)ДаНет
ШифрованиеДа (WIC)Нет
Нативная поддержка браузеромНет (расширение)Да

AST – Сердце JML

JML — это не просто разметка. Это DSL с нативным AST — разметка 2030 года, доступная сегодня.

Позволяет семантические макросы, преобразования, отладку и безопасность без XSS.

Визуализация абстрактного синтаксического дерева

Пример структуры AST — обеспечивает проверку, макросы и безопасный рендеринг

Попробуйте JML прямо сейчас

JML (компактный синтаксис)
html {
  head {
    meta:charset('UTF-8')
    link:rel('stylesheet'),href('https://cdn.ascoos.com/bootlib/css/bootlib.min.css')
  }
  body:class('dark-theme') {
    h1{`Добро пожаловать в JML!`}
    p{`Лёгкая разметка для Ascoos OS.`}
  }
}
Эквивалентный HTML
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" href="https://cdn.ascoos.com/bootlib/css/bootlib.min.css">
</head>
<body class="dark-theme">
    <h1>Добро пожаловать в JML!</h1>
    <p>Лёгкая разметка для Ascoos OS.</p>
</body>
</html>

JML (слева) генерирует точно такой же HTML (справа) — с уменьшением на 17% символов.

JML Studio и сгенерированный вспомогательный код

DSL (предметно-ориентированный язык)
TAG html
  TAG head
    TAG meta CHARSET 'UTF-8'
    TAG link REL 'stylesheet' HREF 'https://cdn.ascoos.com/bootlib/css/bootlib.min.css'
  TAG body CLASS 'dark-theme'
    TAG h1
      TEXT 'Добро пожаловать в JML!'
    TAG p
      TEXT 'Лёгкая разметка для Ascoos OS.'
AST (абстрактное синтаксическое дерево)
{
  "type": "group",
  "name": null,
  "value": null,
  "attributes": [],
  "children": [
    {
      "type": "tag",
      "name": "html",
      "value": null,
      "attributes": [],
      "children": [
        {
          "type": "tag",
          "name": "head",
          "value": null,
          "attributes": [],
          "children": [
            {
              "type": "tag",
              "name": "meta",
              "value": null,
              "attributes": [
                {
                  "type": "attribute",
                  "name": "charset",
                  "value": "UTF-8",
                  "attributes": [],
                  "children": []
                }
              ],
              "children": []
            },
            {
              "type": "tag",
              "name": "link",
              "value": null,
              "attributes": [
                {
                  "type": "attribute",
                  "name": "rel",
                  "value": "stylesheet",
                  "attributes": [],
                  "children": []
                },
                {
                  "type": "attribute",
                  "name": "href",
                  "value": "https://cdn.ascoos.com/bootlib/css/bootlib.min.css",
                  "attributes": [],
                  "children": []
                }
              ],
              "children": []
            }
          ]
        },
        {
          "type": "tag",
          "name": "body",
          "value": null,
          "attributes": [
            {
              "type": "attribute",
              "name": "class",
              "value": "dark-theme",
              "attributes": [],
              "children": []
            }
          ],
          "children": [
            {
              "type": "tag",
              "name": "h1",
              "value": null,
              "attributes": [],
              "children": [
                {
                  "type": "content",
                  "name": null,
                  "value": "Добро пожаловать в JML!",
                  "attributes": [],
                  "children": []
                }
              ]
            },
            {
              "type": "tag",
              "name": "p",
              "value": null,
              "attributes": [],
              "children": [
                {
                  "type": "content",
                  "name": null,
                  "value": "Лёгкая разметка для Ascoos OS.",
                  "attributes": [],
                  "children": []
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}

Оба сгенерированных формата, DSL (слева) и AST (справа), структурированы для использования в WebAI.

Рендеринг на стороне сервера

<?php
/**
 * @ASCOOS-NAME        : Ascoos OS
 * @ASCOOS-VERSION     : 26.0.0
 * @ASCOOS-SUPPORT     : support@ascoos.com
 * @ASCOOS-BUGS        : https://issues.ascoos.com
 *
 * @CASE-STUDY          : jml_to_html_renderer.php
 * @fileNo              : ASCOOS-OS-CASESTUDY-SEC00268
 *
 * @desc Parses JML syntax into HTML using THTML, generates full page from nested structure.
 *
 * @since PHP 8.2.0
 */
declare(strict_types=1);
use ASCOOS\OS\Kernel\HTML\THTML;
use ASCOOS\OS\Kernel\Files\TFilesHandler;
$properties = [
    'output' => './generated_page.html'
];
try {
    $html = new THTML();
    $files = new TFilesHandler();
    // JML as string.
    $jmlString = <<<'JML'
html:lang('en') {
  head {
    meta:charset('UTF-8')
    meta:name('viewport'),content('width=device-width, initial-scale=1.0')
    title {`Advanced Sample Page`}
    style {
      `.container {
            max-width: 1200px;
            margin: 0 auto;
            padding: 20px;
            background-color: #f4f4f4;
        }
        .header {
            text-align: center;
            color: #333;
            padding: 10px;
            border-bottom: 2px solid #000;
        }
        .form-group {
            margin-bottom: 15px;
        }
        .form-group label {
            display: block;
            font-weight: bold;
        }
        .form-group input, .form-group select {
            width: 100%;
            padding: 8px;
            margin-top: 5px;
        }`
    }
    script {
      `function validateForm() {
            let name = document.getElementById("name").value;
            let email = document.getElementById("email").value;
            if (name === "" || email === "") {
                alert("Please fill out all fields!");
                return false;
            }
            return true;
        }`
    }
  }
  body {
    div:class('container') {
      div:class('header') {
        h1 {`Welcome to Ascoos OS Demo`}
        p {`This is a complex demo with nested elements and interactivity.`}
      }
      div:class('content') {
        h2 {`User Registration`}
        form:onsubmit('return validateForm()'),method('POST'),action('/submit') {
          div:class('form-group') {
            label:for('name') {`Name:`}
            input:type('text'),id('name'),name('name'),required('')
          }
          div:class('form-group') {
            label:for('email') {`Email:`}
            input:type('email'),id('email'),name('email'),required('')
          }
          div:class('form-group') {
            label:for('country') {`Country:`}
            select:id('country'),name('country') {
              option:value('us') {`United States`}
              option:value('gr') {`Greece`}
              option:value('de') {`Germany`}
            }
          }
          button:type('submit') {`Submit`}
        }
        br
        div:class('footer') {
          p {`© 2025 Ascoos OS. All rights reserved.`}
          br
          a:href('https://ascoos.com') {`Visit our site`}
        }
      }
    }
  }
}
JML;
    $fullHtml = $html->fromJMLString($jmlString);
    $output = '' . $fullHtml;
    $files->writeToFileWithCheck($output, $properties['output']);
    echo "JML Parsed! Generated HTML:\n";
    echo $output . "\n";
    echo "Saved to: " . $properties['output'] . "\n";
    $html->Free();
    $files->Free();
} catch (Exception $e) {
    echo "Error: " . $e->getMessage() . "\n";
}
?>

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

Ascoos JML Renderer – Расширение браузера

Установите это лёгкое расширение и сделайте любую веб-страницу готовой к JML: рендеринг на стороне клиента без зависимостей!

Полные документы JML

Рендерит <script type="text/jml"> как полноценный HTML-документ.

Встроенные блоки JML

Встраивает <jml> ... </jml> в существующий HTML.

Поддержка пустых и вложенных тегов

br, hr, img, input + вложенные блоки, атрибуты, многострочный текст.

Чистый JS – без зависимостей

Работает на любой странице (локальной/удалённой), совместимо с Manifest V3.

Расширение лёгкое (26 КБ), не собирает данные и работает сразу — идеально для разработчиков, желающих экспериментировать с JML без настройки.

Дорожная карта

2026: Условия, циклы, семантические макросы v2
2027: Экспорт в Markdown/PDF + профили безопасности
2028+: Автоматическое авторство с помощью Ascoos AI

Часто задаваемые вопросы

Совместим ли JML с существующими браузерами?

Да, через рендерер, который генерирует чистый HTML5. Изменения браузера не требуются.

Как JML обрабатывает скрипты и стили?

Поддерживает встроенные скрипты/стили и внешние ссылки с нативным экранированием для безопасности.

Можно ли использовать его с фреймворками вроде React?

Да, через преобразование JML → JSX или прямой парсинг в пользовательские компоненты.