Как используются XForms?
Недавно я наткнулся на XForms (W3C 1.1, ODK XForms), и мне трудно понять, как они используются (если они все еще используются).
На странице тега SO говорится:
XForms - это формат XML, который определяет модель обработки данных и пользовательский интерфейс для данных XML. Например. веб-формы.
Я посмотрел на примеры W3C и не увидел никакого пользовательского интерфейса. Там отображается просто XML.
Что я делаю
Когда я хочу иметь форму в сети, мне нужно работать над разными сторонами: интерфейс и сервер. Интерфейс либо пишет напрямую, используя<form> / <input> /
`Элементы HTML и CSS для стилизации или создания их с помощью таких пакетов, как flask-wtf.
Серверная часть слушает HTTP-запросы GET / POST для получения формы.
Вопрос
У меня много вопросов начинающих. Мой главный вопрос: как используются 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, но никогда о них не слышал)
4 ответа
Я даю несколько ответов на серию ваших вопросов, которые появляются выше.
Где именно типичный вариант использования XForms?
Все, что выглядит как форма.
какую проблему это решает?
XForms предоставляет декларативный язык более высокого уровня для описания и проверки форм.
С чем они сопоставимы?
HTML формируется как нижняя граница, а такие фреймворки, как React, Vue и Angular. Но на самом деле нет ничего, что делало бы в точности то, что делает XForms, поскольку XForms уделяет большое внимание формам, в то время как многие из этих фреймворков этого не делают. См. Также ответ, который я написал некоторое время назад.
XForms используются только в Java?
(Обратите внимание, что я предпочитаю единственное число для "XForms", как в "спецификации XForms". Была старая статья, в которой тогда предпочтение было отдано множественному числу, и тогда она была популярна, но, на мой взгляд, это не делает множественное число правильным..)
Нет, как обсуждалось в комментариях, процессор XForms может быть реализован на JavaScript или на чем угодно. Исторически существовали плагины для браузера, реализации на стороне клиента на JavaScript и смешанные реализации клиент-сервер.
Как используются XForms?
Это зависит от реализации процессора. Вы пишете теги и атрибуты XForms на своем основном языке, например HTML. Затем вы отправляете этот документ в браузер при связывании с библиотекой JavaScript процессора или, для реализаций с серверным компонентом, вы загружаете его в свою библиотеку на стороне сервера.
Означает ли это, что XForms является альтернативой оценке данных клиентской формы с помощью JavaScript? Только это или больше?
Это больше, и он может иметь или не иметь ничего на стороне клиента или на стороне сервера или JavaScript, хотя в первоначальном намерении и на практике идея состоит в том, что это замена и улучшение для встроенной обработки форм браузера.
Мне не удалось найти плагин ни для Firefox, ни для Chrome. Вы случайно не знаете одного?
Нет, плагины остались в прошлом.
Экосистема ODK использует подмножество XForms 1.1 и широко используется, поскольку позволяет описывать сложную логику в определении формы, а также доступно множество совместимых инструментов (построители форм, агрегаторы данных, клиенты сбора данных) (например, KoBoToolbox, Ona, Survey123, ОДК). Как упоминал Ален, он не совместим с XForms и, вероятно, никогда не будет поддерживать полную спецификацию, но в последние несколько лет они приблизились. Некоторые странные отклонения имели место по историческим причинам (и, надеюсь, со временем исчезнут).
Однако большинство пользователей ODK понятия не имеют, что их инструменты работают на XForms, так как это абстрагируется конструкторами форм, такими как pyxform (см. XLSForm.org), конструктором форм KoBo и ODK Build.
В экосистеме ODK есть одна реализация javascript клиента сбора данных, которая называется Enketo (см. Enketo.org).
XForms был определен для использования в основном языке, таком как XHTML или SVG. ODK не является полностью совместимой реализацией. Моя собственная реализация XForms (XSLTForms) основана на XSLT 1.0 (изначально доступна в браузерах) для создания среды выполнения HTML+Javascript.
В моем случае я использовал экосистему ODK для предоставления решений по маркетинговым исследованиям для компаний. Он может обрабатывать сложную логику, мультимедиа, GPS и многое другое. На мобильных устройствах: Android с ODK Collect и iOS с GIC Collect, используя один и тот же файл XML. А в качестве бэкэнда вы можете использовать свои серверы с ODK Central или Google Drive, ONA или Kobotoolbox. Вы можете значительно сократить время и стоимость разработки. Раскрытие информации Я являюсь частью группы разработчиков GIC Collect.