事后看来,基于XML的XAML是错误的还是好的方法?


16

XAML本质上是XML的子集。据说将XAML基于XML的主要好处之一是可以使用现有工具进行解析。尽管(语法上不重要的)属性值将保持文本形式并需要进一步解析,但它在很大程度上可以。

用XML派生的语言描述GUI有两种主要选择。一种是做WinForms所做的事情,并用真实的代码对其进行描述。尽管它并非完全没有优势,但这样做有很多问题(将XAML与这种方法进行比较是一个问题)。另一个主要的替代方案是设计专门针对手头任务的全新语法。这通常称为领域特定语言

因此,事后看来,作为对子孙后代的一个教训,将XAML基于XML是一个好主意,还是作为一种定制设计的领域特定语言会更好?如果我们要设计一个更好的UI框架,我们应该选择XML还是自定义DSL?

由于积极地思考现状要容易得多,尤其是社区非常喜欢的现状,因此,我将举一些示例理由说明为什么在XML之上进行构建可能会被认为是错误的。

基于XML的语言有其作用:解析起来要容易得多(核心解析器已经可用),所需的设计工作得多,并且对于第三方开发人员来说,替代解析器也要容易编写。

但是由此产生的语言可能会以各种方式令人不满意。这很冗长。如果更改某物的类型,则需要在结束标记中进行更改。它对评论的支持很差;注释掉属性是不可能的。XML对属性的内容有一些限制。标记扩展必须建立在XML语法的“顶部”,而不是深入和完美地集成到其中。而且,我个人最喜欢的是,如果您通过属性设置内容,则使用的语法与将内容属性设置为完全相同的语法完全不同

也有人说,由于每个人都了解XML,因此XAML需要的学习较少。严格来说,这是事实,但是学习语法只是学习新UI框架的一小部分时间。正是框架的概念使曲线变得陡峭。此外,基于XML的语言的特质实际上可能会添加到“需要学习”的篮子中。

易于解析会抵消这些缺点吗?下一个很酷的框架是否应该延续这一传统,还是应该花时间设计出色的DSL,而DSL是现有工具无法解析的,并且每个人都需要学习其语法?

PS并非每个人都对XAMLWPF感到困惑,但是有些人对此感到困惑。XAML是类似XML的东西。WPF是支持绑定,主题化,硬件加速和许多其他很酷功能的框架。


3
是的,它可以由XML解析器解析,但不能有意义/完全解析。例如,它使用字符串属性来定义数据源和属性映射。
康拉德·鲁道夫2012年

5
您有什么建议呢?关于特定技术适用性的任何讨论都必须解决合适的替代技术。
罗伯特·哈维

2
您知道XAML并非没有对手。XUL,Glade和QML都基于同一思想。我认为您不公平地选择了XAML。
user16764 2012年

3
我认为XAML的最大好处不是XML解析器可以解析它。而是XAML与XML相似,并且大多数开发人员已经知道如何使用XML,因此学习的难度要小得多。
Juozas Kontvainis 2012年

2
@JuozasKontvainis如果用“工作”来表示“用其工具解析”,则可以。如果您的意思是“编写由它描述的UI”,那么熟悉的语法可能看起来很有帮助,但实际上,您仍然需要学习将属性放入内部的内容(因为它不是XML),这是迄今为止最困难的以我的个人经验 我认为,学习一种新的语法(尤其是简单且经过精心设计的语法)是微不足道的。
罗曼·斯塔科夫

Answers:


4

使用XML 的唯一令人信服的理由是建立开放数据标准。 XAML与Silverlight和WPF中使用的显示语言相同;任何供应商都可以使用相同的标记标准为自己的平台创建显示定义,并且可以在Silverlight或WPF中重用它。

在航空航天工业中,我们拥有控制室,由于计算机技术的进步,控制室现在已经相当灵活。过去,所有硬件都是定制的,独特的且非常昂贵。如今,所有这些都可以通过廉价,通用的现成PC来运行。这大大减少了供应商的锁定。但是,显示小部件仍是使用ActiveX编写的,因为这始终是这样做的。

ActiveX需要访问已经过时的Microsoft工具。因此,空军和远程仪表小组提出了一种基于XML的数据显示标记语言。这将使从业人员可以在他们选择的编辑器中使用XML标记来设计显示。听起来有点熟?

没有人认为XML并非没有缺陷。但这是设计工作的最佳选择,直到出现更好的情况。

另请参阅
为什么XML不正确


3
您是否同意相同的推理同样适用于诸如YACC语法说明,TeX,正则表达式,Verilog甚至LISP之类的东西?我们为每一种都提出了特殊的语法。它们将以您在第一段中列出的相同方式受益。难道不是因为XML满足了您提到的目标,对XML使用XML是正确的选择吗?
罗曼·斯塔科夫

只有XML被广泛认为是通用数据元标准,您可以从中创建任意数量的单个数据标准。为了避免使水浑浊,我删除了第一段。
罗伯特·哈维

S表达式从未成为元数据标准,可能是因为没有人喜欢所有这些愚蠢的括号。无处不在是这里的诱人因素。如果您愿意的话,您提到的所有这些替代语法都可以用XML表示。
罗伯特·哈维

2
它们都可以用YAML和JSON表示(反之亦然)。
2012年

2
我在整个争论中看到的一个巨大问题是XAML并不是真正的数据。当然,它可以仅被视为对象图,但是这种想法可能是为什么很多人不喜欢它以及为什么它具有这样的学习曲线。“嘿,放开对象图吧,我的意思是用户界面”。我不知道如何做得更好,但我有信心做到。
Earlz 2013年

2

您对XML的异议与将其用作GUI描述语言无关。他们都抱怨使用XML语法同样适用于任何形式的XML。

因此,听起来您只是不喜欢XML。

没错,它可能不是手动编辑的最佳选择,但是对于GUI描述语言,我会提出一些反对意见:

  1. (恕我直言,)GUI是图形化的,应该以图形方式进行布局。文件格式并不是那么重要,因为您实际上不应该手动编辑它。(出于源代码控制的考虑,基于文本的方法很好,但是详细程度不是问题。)

  2. 除了可以使用解析器之外,XML还易于验证:您可以编写DTD或XML Schema,然后使用通用工具来告诉您文件是否合法。这对于GUI描述语言将非常有用。在JSON或YAML中做同样的事情并不那么简单。

  3. 如果您真的不满意直接编写XAML,那么没有什么可以阻止您开发新格式并将其编译为XAML的。例如,您可能想出了从JSON到XAML的直接映射,因此您可以使用其JSON的语法更轻(以及注释掉属性的功能),然后在构建应用程序时生成XAML。人们很少再直接编写HTML了,但是HTML仍然是一种很好的格式。


1
我喜欢XML;我只是不喜欢手写。1.是的,他们应该这样做,但是事实是Visual Studio不能真正实现这一目标。3.与事后看来XAML是否是一个坏主意的讨论正交。是的,我们可以,但为什么一个需要,如果XAML是不是一个坏的选择?
罗曼·斯塔科夫

1
我的观点是,您完全根据编写它的标准来判断它;您的担忧也必须与验证和解释保持平衡。编写更好的DSL几乎肯定会更难解析。但是中间的编译步骤可以为您提供两全其美的方法。
benzado 2012年

0

这个问题是主观的,因此我认为根据我的个人喜好发布答案很公平。

XML很难阅读。例如,打开此链接,然后单击“示例”以并行比较XML和YAML。后者显然更易于阅读。

如果您想使用XML来描述GUI,那么最好确保您提供了足够的工具,这样人们就不必看XML。

显然,XPF在这方面失败了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.