Как используются XForms? - PullRequest
1 голос
/ 09 мая 2020

Недавно я наткнулся на XForms ( W3 C 1.1 , ODK XForms ), и мне трудно понять, как они используются (если они все еще используются).

На странице тега SO говорится:

XForms - это формат XML, который определяет модель обработки данных и пользовательский интерфейс для данных XML. Например. веб-формы.

Теперь я посмотрел примеры W3 C и не увидел никакого пользовательского интерфейса. Там отображается просто XML.

Чем я занимаюсь

Когда я хочу иметь форму в сети, мне нужно работать с разными сторонами: интерфейс и бэкэнд. Внешний интерфейс либо пишет напрямую, используя элементы <form> / <input> / `HTML и CSS для стилизации, либо генерирует их с помощью таких пакетов, как flask -wtf .

Back- end слушает GET / POST HTTP-запросы для получения формы.

Вопрос

У меня много вопросов новичка. Мой главный вопрос: Как используются XForms? . Наибольшую ценность для меня будет представлять минимальный пример Python. Может быть, что-то простое, например, форма регистрации: поле имени пользователя, поле пароля и поле подтверждения пароля могли бы показать это.

Я бы создал HTML вот так:

<form action="" method="POST">
    <label for="username">Username</label>
    <input type="text" name="username" id="username" />

    <label for="pw">Password</label>
    <input type="password" name="pw" id="pw" />

    <label for="pw2">Confirmation</label>
    <input type="password" name="pw2" id="pw2" />
    <input type="submit" />
</form>

И с Flask бэкэнд может выглядеть так:

# Third party modules
from flask import redirect, url_for, render_template
from flask_login import current_user
from flask_wtf import FlaskForm
from wtforms import PasswordField, StringField, SubmitField

# First party modules
from my_db_models import User


class LoginForm(FlaskForm):
    email = StringField("Email")
    password = PasswordField("Password")
    submit = SubmitField("Log In")


@auth.route("/login", methods=["GET", "POST"])
def login():
    if current_user.is_authenticated:
        return redirect(url_for("main.index"))
    form = LoginForm()
    if form.validate_on_submit():
        user = User.query.filter_by(username=form.username.data).first()
        if user is None or not user.check_password(form.password.data):
            flash(INVALID_EMAIL_OR_PASSWORD, "error")
            return redirect(url_for("auth.login"))
        login_user(user, remember=form.remember_me.data)
        return redirect(url_for("index"))
    return render_template("login.html", form=form)

Как это будет выглядеть с XForms? Где именно типичный вариант использования XForms? С чем они сопоставимы? XForms используются только в Java? (Я видел Python пакетов, но никогда о них не слышал)

Ответы [ 3 ]

1 голос
/ 10 мая 2020

Я даю некоторые ответы на серию ваших вопросов, которые появляются выше.

Где именно находится типичный вариант использования XForms?

Все, что выглядит как форма.

какую проблему он решает ?

XForms предоставляет декларативный язык более высокого уровня для описания и проверки форм.

С чем они сопоставимы?

HTML формируется как нижняя граница и такие фреймворки, как React и Vue и Angular. Но на самом деле нет ничего, что делало бы в точности то, что делает XForms, поскольку XForms уделяет большое внимание формам, в то время как многие из этих фреймворков этого не делают. См. Также этот ответ Я написал некоторое время назад.

Используются ли XForms только в Java?

(Обратите внимание, что я предпочитаю единственное число для "XForms", как в "спецификации XForms". Была старая статья, которая тогда предпочитала множественное число и была популярна в то время, но, на мой взгляд, это не делает множественное число правильным.)

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

Как используются XForms?

Это зависит от реализации процессора. Вы пишете теги и атрибуты XForms на своем основном языке, например HTML. Затем вы отправляете этот документ в браузер при связывании с библиотекой JavaScript процессора или, для реализаций с серверным компонентом, вы загружаете его в свою серверную библиотеку.

Означает ли это, что XForms является альтернативой оценке данных формы на стороне клиента с помощью JavaScript? Только это или больше?

Это больше, и он может иметь или не иметь ничего на стороне клиента или на стороне сервера или JavaScript, хотя в первоначальном намерении и на практике идея состоит в том, что это замена и улучшение для встроенная обработка формы в браузере.

Мне не удалось найти плагин для Firefox или Chrome. Вы случайно знаете один?

Нет, плагины ушли в прошлое.

0 голосов
/ 11 мая 2020

Экосистема ODK использует подмножество XForms 1.1 и широко используется, поскольку позволяет описывать сложные логические c в определении формы, а также доступно множество совместимых инструментов (построители форм, агрегаторы данных, клиенты сбора данных) (например, KoBoToolbox, Ona, Survey123, ODK). Как упоминал Ален, он не совместим с XForms и, вероятно, никогда не будет поддерживать полную версию spe c, но в последние несколько лет они приблизились. Некоторые странные отклонения имели место по историческим c причинам (и, будем надеяться, со временем исчезнут).

Однако большинство пользователей ODK понятия не имеют, что их инструменты работают на XForms, так как это абстрагируется конструкторами форм. такие как pyxform (см. XLSForm.org), конструктор форм KoBo и сборка ODK.

Существует одна javascript реализация клиента сбора данных в экосистеме ODK, которая называется Enketo (см. enketo.org) .

0 голосов
/ 09 мая 2020

XForms было указано для использования в пределах основного языка, такого как X HTML или SVG. ODK не является полностью совместимой реализацией. Моя собственная реализация XForms (XSLTForms) основана на XSLT 1.0 (изначально доступен в браузерах) для создания среды выполнения HTML + Javascript.

...