如何使用XForms?

问题描述 投票:1回答:3

最近我偶然发现了XForms(W3C 1.1ODK XForms),我很难看清它们的用法(如果仍然使用)。

SO标签页面说:

XForms是一种XML格式,它指定XML数据的数据处理模型和用户界面。例如。网络表单。

现在我查看了the W3C examples,但看不到任何类型的用户界面。在那里显示的只是XML。

我做什么

[当我想在网络上拥有一个表单时,那么我就必须着手进行工作:前端和后端。前端要么直接使用<form> / <input> /的HTML元素和CSS进行样式编写,要么使用flask-wtf之类的包生成它们。

后端侦听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软件包,但我从未听说过)

xforms odk odk-xform
3个回答
0
投票

XForms已被指定为在诸如XHTML或SVG的宿主语言中使用。 ODK不是完全兼容的实现。我自己的XForms实现(XSLTForms)基于XSLT 1.0(在浏览器中本来可用)来生成HTML + Javascript运行时。


0
投票

我为您在上面出现的一系列问题提供一些答案。

XForms的典型用例到底在哪里?

任何看起来像表格的东西。

它解决了什么问题?

XForms提供了一种用于描述和验证表单的高级声明性语言。

它们具有什么可比性?

HTML形式是一个下限,而React和Vue和Angular等框架。但是实际上,没有什么功能可以完全实现XForms的功能,因为XForms着重于表单,而其中许多框架却没有。另请参阅this answer我写了一段时间。

XForms仅在Java中使用吗?

“我的意见。)

否,如评论中所述,可以使用JavaScript或任何您想要的东西来实现XForms处理器。历史上一直存在浏览器插件,JavaScript中的客户端实现以及混合的客户端-服务器实现。

如何使用XForms?

取决于处理器的实现。您可以在宿主语言(例如HTML)中编写XForms标签和属性。然后,您可以将该文档提供给浏览器,同时链接到处理器的JavaScript库,或者对于具有服务器组件的实现,可以将其提供给服务器端库。

这是否意味着XForms是使用JavaScript进行客户端表单数据评估的替代方法?是仅此一个还是更多?

还有更多,它对客户端,服务器端或JavaScript可能有也可能没有任何东西,尽管在最初的意图和实践中,其想法是它替代并增强了内置浏览器表单处理。

我找不到用于Firefox或Chrome的插件。您碰巧认识一个人吗?

不,插件已成过去。


0
投票
ODK生态系统使用XForms 1.1的一个子集,因此得到广泛使用,因为它允许在表单定义中描述复杂的逻辑,并且有许多兼容的工具(表单构建器,数据聚合器,数据收集客户端)(例如KoBoToolbox, Ona,Survey123,ODK)。正如Alain所提到的,它不符合XForms,并且可能永远不会支持完整的规范,但是在最近几年中,它们一直在发展。由于历史原因,有些奇怪的偏差已经出现(希望最终会消失)。

但是,大多数ODK用户都不知道他们的工具是由XForms驱动的,因为它是由pyxform(请参阅XLSForm.org),KoBo的表单构建器和ODK Build等表单构建器抽象的。

在ODK生态系统中有一个JavaScript实施的数据收集客户端,称为Enketo(请参阅enketo.org。)>

© www.soinside.com 2019 - 2024. All rights reserved.