我一直想知道为什么XML的名称为L。

XML本身不执行任何操作。它只是一种数据存储格式,而不是一种语言!语言“做”事情。

使XML“做”事情的方法是将xmlns属性添加到其根元素,以将其转变为某种语言。只有这样,它才能告诉环境它的含义。
一个例子是XHTML。它是活动的,具有链接,超文本,样式等,均由xmlns触发。否则,XHTML文件只是标记节点中的一堆数据。

那么为什么XML被称为语言?它没有描述任何东西,没有解释,只是它。

编辑:也许我的问题应该更广泛。由于当前的答案是“因为XML是以SGML命名的,而XML是以GML的命名的,等等”,问题应该是,为什么标记语言(如XML)被称为语言?

哦,WRT票数接近:不,我不是在问X。我是在问L!

评论

您基于某种语言必须“做”某件事的要求?我在dictionary.com的任何定义中都没有看到它。

就像斯瓦希里语只有在双方都理解的情况下才能被理解。或者,如果读者理解该语言的那一部分,则可以理解医学期刊上的文章。没什么两样人们组成了定义。

标记语言是en.wikipedia.org/wiki/Markup_language
的常用术语
@MrLister:“这些是人类语言,而不是计算机语言”语言是一种语言。在最极端的情况下,甚至英语也需要上下文信息(正在使用哪种方言)来明确理解。并不能阻止它成为一种语言。您的问题只是一个错误的前提。

语言不做任何事情,它们表达和交流事物

#1 楼

真正的答案是XML的名称为L,因为一个叫Raymond Lorie的人是1970年代IBM最早的“标记语言”的设计师之一。开发人员必须找到该语言的名称,所以他们选择GML,因为它是三个开发人员(Goldfarb,Mosher和Lorie)的缩写。然后,他们创建了backronym通用标记语言。

后来它被标准化为SGML(标准化通用标记语言),并且在创建XML时,开发人员希望保留ML后缀以指示与SGML的家族关系,并在其中添加了X。前,因为他们认为它看起来很酷。 (尽管实际上没有意义-XML是一种元语言,它允许您定义可扩展的语言,但是XML本身并不是可扩展的。)关于第二个问题,即XML是否可以合法被称为语言:

任何可以通过计算处理的结构化文本(甚至二进制)格式都可以称为语言。语言不会像这样“做”任何事情,但是某些软件可能会处理该语言的输入并根据语言来“做”某事。

您注意到XML是正确的“存储格式”,但是文本存储格式可以称为语言,这些术语不是相互排斥的。

编程语言是语言的子集。例如。 HTML和CSS是语言,但不是编程语言,而JavaScript是真正的编程语言。也就是说,也没有正式的编程语言定义,并且存在很大的灰色区域的语言,根据您的观点,可以将其称为数据格式或编程语言。 XML显然是一种语言。只是不是一种编程语言-尽管它可以用于定义XSLT之类的编程语言。

您关于名称空间的观点无关紧要。命名空间是XML的可选功能,并且不会更改XML词汇表的语义。如果格式可能包含多个词汇表,就只需要对元素名称进行歧义即可。也许您是说诸如XHTML,RSS,XSLT等特定词汇是语言,因为它们将元素和属性与特定的语义相关联,但是XML标准本身并未为特定的元素和属性定义任何语义,因此感觉不像是“真实语言”。

我对此的回答是,XML确实定义了语法和语义,只是在不同的级别上对其进行了定义。例如,它定义了元素和属性的语法以及有关如何处理它们的规则。 XML是一种“元语言”,它仍然是一种语言(就像元数据仍然是数据一样!)。例如,EBNF显然也是一种语言,但其目的是定义其他语言的语法,因此它也是一种元语言。

评论


在计算中有语言的正式定义。

–user22815
16年4月3日在18:01

@Snowman:“形式语言”不一定与计算中通常所说的语言相对应。例如,“形式语言”不需要是文本的-机器代码与大多数二进制格式和协议一样,是形式语言。因此,我不会说“形式语言”一词与计算中的“语言”具有相同的含义。

–雅克B
16年4月3日在18:14

我不知道任何语言必须是文字还是非文字的要求。从终端构造句子的想法与这些终端中位的任意解释无关,也与哪种类型的计算机(基于硅或碳的计算机)能够读取它们无关。

–user22815
16年4月3日在18:16

@NicolBolas:好一点,机器代码绝对是一种语言。我只是认为将二进制语言称为“格式”更为常见,例如您说的是GIF格式,而不是GIF语言。

–雅克B
16-4-4在7:25

@BenCottrell:那不是图吗,因为可能有循环?

–雅克B
16年4月4日在13:05

#2 楼

因为它是一种语言。一种标记语言,而不是编程语言。

请注意,诸如英语和西班牙语之类的自然人类语言也不会“做任何事情”。实际上,从技术上讲,C ++和Java之类的东西不会“做”任何事情,直到它们被馈送到编译器并执行输出。做事和成为语言在很大程度上是相互正交的。

评论


用“解释器”代替“编译器”。被提供给编译器也不会使它们“做任何事情”,它只是将它们翻译成另一种语言,这又不会“做任何事”。所有执行都是解释。有时,解释器可能非常简单,并用硅实现,在这种情况下,我们称其为“执行单元”,但它仍然是解释器。 无论如何,好的答案!

–Jörg W Mittag
16-4-3在19:00



@JörgWMittag好点。由于我随机选择了通常会编译的语言,因此添加了“并且执行了输出”。

– Ixrec
16年4月3日在19:02

如果可以的话,是一种可扩展的标记语言。

–doppelgreener
16-4-4在5:58



我认为人类语言会“做”事情。参见言语行为理论...

–雷
16年4月4日在14:53

甜美,甜美的正交性。在不同的代数中执行该语言,就会出现一系列全新的动作。从理论上讲,无论如何。

– Kenogu Labz
16年4月4日在21:28

#3 楼

令Σ为非空的有限符号集,称为字母。然后,∑ *是可数的无限个有限词集,可以通过将Σ中的零个或多个符号串联而形成。任何明确定义的子集L⊆ Σ*是一种语言。

将其应用于XML。它的字母是Unicode字符集U,它是非空且有限的。并非每个零个或多个Unicode字符串联都是一个格式正确的XML文档,例如,字符串

<tag> soup &; not <//good>


显然不是。子集XML&subset;形成格式正确的XML文档的U *是可确定的(或“递归”)。有一台机器(算法或计算机程序)将任何单词w∈U *作为输入,并且在有限的时间后,如果w∈XML则输出1,否则输出0。这样的算法是任何XML处理软件的子例程。并非所有语言都是可决定的。例如,不是在有限的时间内终止的有效C程序集(这称为停止问题)。当设计一种新语言时,要做出的一个重要决定就是它应该尽可能强大,还是为了可判定性而更好地限制表达性。

可以通过以下方式定义某些语言:一种可以产生这种语言的语法。语法由


一组有限的文字(也称为终止符),
语法的不连续有限变量集(也称为非终止符),
一个独特的起始符号,取自变量集和
一组允许进行某些替换的规则(所谓的产生式)。

完全由文字组成,可以通过以起始符号开头然后应用给定的规则来得出,该规则属于语法产生的语言。


例如,以下语法(用非正式的表示法)使您可以精确地导出十进制表示的整数。 123456
变量是符号S和D.

S是起始符号。
任何出现变量S可以用文字7
替换为8以外的任何文字,后跟变量D。




任何出现的变量D都可以用任何文字替换,后跟变量D的另一个实例,或者用空字符串替换




这就是我们得出9的方法:

S —(应用规则4,第二个变体)→0 D —(应用规则5,第一个变体)→0 D —(应用规则5,第二个变体)→0


根据您在语法中允许的复杂规则,需要使用各种复杂的机器来证明给定的单词实际上可以由语法产生。上面给出的示例是一个常规语法,它是最简单,功能最弱的。下一个强大的语法类别称为上下文无关。这些语法也很容易验证。 XML(除非我忽略了一些我不知道的晦涩功能)可以用上下文无关的语法来描述。语法分类形成语法的乔姆斯基层次结构(因此形成语言)。语法可以描述的每种语言至少是半确定的(或“递归枚举”)。即,存在一种机器,给定实际上属于该语言的单词,该机器得出证明它可以在有限时间内由语法产生的证明,并且永远不会输出错误的证明。这样的机器称为验证器。请注意,如果输入的单词实际上不属于该语言,则该机器可能永远不会停止运行。显然,我们希望用功能较弱的语法来描述我们的编程语言,以期能够在有限的时间内拒绝无效程序。

Schemata是XML的补充,可以完善格式良好的集合文件。遵循某种模式的格式正确的文档根据该模式称为有效。例如,字符串

<?xml version="1.0" encoding="utf-8" ?>
<root>all evil</root>


是格式正确的XML文档,但不是有效的XHTML文档。存在用于XHTML,SVG,XSLT以及其他的模式。模式验证也可以通过一种算法来完成,该算法可确保在每个输入经过有限数量的步骤后停止运行。这样的程序称为验证器或验证解析器。图式由所谓的scema定义语言定义,这是一种正式定义语法的方式。 XSD是XML的官方模式定义语言,它本身是基于XML的。 RELAX NG是XSD的一种更优雅,更简单且功能稍逊的替代方法。 “ XML”。

您可以定义一组规则,使XML文档可以解释为计算机程序的描述。前面提到的XSLT是使用XML构建的这种编程语言的示例。更一般而言,如果需要的话,可以将几乎所有编程语言的抽象语法树很自然地序列化为XML。

评论


@乔治:在数学中,“定义明确”在很大程度上只是一个增强器:数学上存在的所有事物都已经定义明确。

–凯文
16年4月3日在21:01

@乔治(Giorgio)“定义明确”是指有一个正式谓词可以告诉某项是否属于该集合。该谓词通常是不可计算的,但必须明确指定而没有矛盾。否则,可能会发生不好的事情。 “成对的字符串(w,M),其中M是输出w然后停顿的图灵机的最小描述”是一个定义明确但不可计算的谓词(请参阅Kolmogorov复杂度)。 …

– 5gon12eder
16-4-3在21:02

@ 5gon12eder:该集合在ZFC下不存在(因为分离的公理模式不足以描述它)。如果您使用其他集合理论,则应指定它。

–凯文
16-4-3在21:03



@ 5gon12eder:“包含该集合中未包含的所有字符串的集合”不存在。具有讽刺意味的是,术语“定义明确”并不是定义明确的。

–凯文
16-4-3在21:09



格式正确的属性或验证是通过语法执行的。如果您提到的话,这个答案是完美的。

– Thibault D.
16年4月6日在8:10

#4 楼

在计算机科学中,形式语言只是一组字符串,通常是无限的并且经常使用规则来描述(这些规则的两个常见版本是正则表达式和形式语法)。

请注意,这意味着所有语言需要的是语法,语言不需要描述每个有效字符串的含义(称为语义)。 。例如,XHTML是一种形式语言,其语义(大致和非正式地)描述了超文本文档的外观和行为。

XML仍然是一种语言,即使它本身没有语义(但从XML派生的许多语言都可以使用,例如XHTML和XAML。术语“语言”保留给人类可读的格式。

评论


@MrLister,因为它们不是人类可读的。当它们不可读时,我们倾向于将其称为格式或数据格式。

–梅森·惠勒
16-4-3在13:43

@JamesSnell当然,不要与其他ML语言家族混淆。是的,首字母缩略词太拥挤了!

–梅森·惠勒
16年4月3日在14:07

如果人们使用正式的工具为JFIF等构建解析器(尤其是验证器),那么工程师可能确实将其称为“语言”。虽然更有可能作为“语法”。

–JDługosz
16-4-3在20:24

@MrLister:嗯,它们是语言,但是因为它们定义了可重用的数据结构,所以它们有一个特殊的名称:格式。但是,是的,这些也是语言。

–轨道轻赛
16年4月4日,0:58

@MrLister:命名格式更多是营销问题。 XML人士称XML为XML,是因为“ * ML”表示与先前格式(例如GML和SGML)的家族关系,并且因为他们认为前面带有X看起来很酷。 GML之所以称为GML,是因为它是一种通用的标记语言,也因为它是这三种语言设计者的缩写。因此,基本上,XML中的L是因为一个叫Raymond Lorie的人是第一种标记语言的设计者。

–雅克B
16-4-4在8:19



#5 楼

语言是一种传达信息的方法。

编程语言是一种传达算法的方法。

像XML这样的标记语言是一种传达数据的语言。

评论


...并且该数据很可能是算法的描述。

–罗安
16年4月5日在8:18

@Luaan ...和一种编程语言也可能被滥用来传达数据。例如,与JSON类似。

– Philipp
16年4月5日在8:34

您甚至可以递归。我已经看到了包含C#代码的NAnt脚本(一种基于XML的语言),该脚本仅用于数据存储。使用包含XML的字符串文字。是的,这是使成年男子哭泣的东西:P

–罗安
16-4-5的8:43

#6 楼

XML是一种元语言。您可以使用它来定义特定的语言。语言从不做任何事情,它们只允许我们表达事物。
此外,XML不是“存储语言”也不是事实。相反,实际上。您可以随意存储XML文档。最好将XML视为一种传输语言。
PS。如果您不认为XML可以“做任何事情”,则必须说明许多系统(例如码头)将XML用作(不良)编程语言的情况。这是对XML的一种可悲的滥用,但是它无处不在,并且只是众多示例之一。