2

我最近偶然发现了 XForms(W3C 1.1ODK XForms),我很难了解它们是如何使用的(如果它们仍在使用的话)。

SO标签页说:

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

现在我查看了 W3C 示例,但没有看到任何类型的用户界面。它只是在那里显示的 XML。

我所做的

当我想在 Web 中创建一个表单时,我必须从侧面着手:前端和后端。前端要么直接使用<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 包,但从未听说过)

4

4 回答 4

3

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

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

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

它解决了什么问题?

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

它们有什么可比性?

HTML 表单作为下界,以及 React、Vue 和 Angular 等框架。但实际上,没有什么能完全像 XForms 那样做,因为 XForms 非常关注表单,而其中许多框架却没有。另请参阅我不久前写的这个答案。

XForms 是否只在 Java 中使用?

(请注意,我更喜欢“XForms”的单数,就像在“XForms 规范”中一样。有一篇旧文章更喜欢复数,当时很流行,但在我看来,这并不能使复数正确.)

不,正如评论中所讨论的,XForms 处理器可以用 JavaScript 或您想要的任何东西来实现。从历史上看,有浏览器插件、JavaScript 中的客户端实现以及客户端-服务器混合实现。

XForms 是如何使用的?

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

这是否意味着 XForms 可以替代使用 JavaScript 进行的客户端表单数据评估?仅此而已还是更多?

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

我找不到 Firefox 或 Chrome 的插件。你碰巧认识一个吗?

不,插件已成为过去。

于 2020-05-10T19:58:39.943 回答
2

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

然而,大多数 ODK 用户并不知道他们的工具是由 XForms 提供支持的,因为这是由 pyxform(参见 XLSForm.org)、KoBo 的表单构建器和 ODK Build 等表单构建器抽象出来的。

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

于 2020-05-11T14:53:58.897 回答
1

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

于 2020-05-09T17:02:20.270 回答
0

就我而言,我一直在使用 ODK 生态系统为公司提供营销研究解决方案。它可以处理复杂的逻辑、多媒体、GPS等。在移动设备中:使用相同 XML 文件的带有 ODK Collect 的 Android 和带有 GIC Collect 的 iOS。对于后端,您可以将服务器与 ODK Central 或 Google Drive、ONA 或 Kobotoolbox 一起使用。您可以显着减少开发时间和成本。披露 我是 GIC Collect 开发小组的一员。

于 2021-07-11T05:59:05.343 回答