Wiki标记语言Wiki markup language),亦称Wiki MarkupWikitextwiki代码,是一种轻量级标记(Markup)语言,被用于撰写Wiki网页,例如维基百科,最初是一个简单化的,非正统的,中间性的HTML。它的最终目的是被wiki软件转换成HTML,并且重新回到浏览器中。该语言最初创建于1995年,在最初的wiki站点WikiWikiWeb用于格式化页面。


构成

Wikitext介绍.jpg

  • 样式控制:类似现在流行的Markdown语言,主要是HTML语言的简化写法。
  • 逻辑运算:通过解析器函数扩展提供,现在已经被吸收成为MediaWiki的默认组件,并可以通过其他扩展增加新的函数,适用于逻辑结构简单、嵌套较少的场景,能够便捷的为编辑者提供一些格式化、判断上的便利。对于较为复杂的逻辑运算,我们推荐使用Lua模块来实现。
  • 数据存储与查询:非默认功能,通过Semantic MediaWiki扩展提供,藉由新定义的解析器函数来实现数据的存、查。由于性能问题,更适合文字类的图谱化信息,对于大批量、频繁更新的结构化数据,wikitext已经很难胜任,在灰机,我们推荐使用JSON和MongoDB来实现。

概述

初衷

wikitext在最初的使命是一种简化书写的HTML语言

  • 例如,我们通过“[[链接]]”即可书写一个站点的内链,而不用手打一串

<a href="http://www.huiji.wiki/wiki/链接" class="extiw" title="链接"><i class="fa fa-paperclip"></i> 页面分类</a>

大部分情况下,在MediaWiki的源代码编辑器中,wikitext可以与HTML语言混用,除非是一些有注入风险的html标签和属性,譬如<a>和CSS属性中的url,他们会被wikitext处理掉,无法生效。

  • 这些可以通过JavaScript来异步添加,当然,这需要额外的开发者权限
  • 除了使用JS之外,灰机还提供了Mustache模板,在Mustache中,可以自由的书写全部的HTML语言(以及JavaScript),同样需要开发者权限。

引入逻辑

随着维基的发展,wikitext引入了一个重要的概念——“解析器函数”,从而其内容和功能也从单纯的样式控制扩展到了“样式控制”+“逻辑运算”。

这一变革带来了许多深远的影响,MediaWiki也因此以其独树一帜的逻辑运算功能成为维基软件中最全能的一个。但也带来了一些缺陷,并在日后逐渐浮出水面:

  • MediaWiki的解析器函数使用的语法是{{#}}+参数(arguments)而非真正逻辑语言常用的起止符配对机制。这使得一段逻辑有多长都要全部放在双括号中,结果就是wikitext书写的逻辑嵌套非常难读、难以维护并且给可视化编辑器造成了巨大的兼容障碍(需要parser/escape很多极端的情况),作为参数分隔的管道符“|”还常常与书写表格的pipe语法互相冲突导致样式解析失常。
  • 解析器函数需要被MediaWiki的Parser进行处理,样式控制的部分被还原成HTML,逻辑部分需要被处理成PHP函数,在特别复杂的wikitext嵌套情况下会导致网页加载速度变慢。极端情况下(例如高频度的?action=purge或其他触及批量刷新缓存的操作),还有可能卡死数据库(突出表现在Semantic MediaWiki的#ask和#show函数上)。

替代方案

  • 逻辑运算:随着Lua被引入MediaWiki,这种真正的程序语言可以完全取代解析器函数,以绕过效率较低的parser机制,从而大大减少页面加载、渲染所需的时间。
  • 数据查询:灰机引入了全新的JSON+MongoDB架构,通过Lua函数来实现数据查询,可以有效减轻对关系型数据库的依赖和压力,同时提高开发的灵活性和查询效率。类似的架构还有在gemepedia上被广泛应用的Cargo(基于关系型数据库的表格存储、查询语法)。

灰机wiki支持的标记语法

灰机采用MediaWiki搭建,MediaWiki支持大多数常见的HTML标签。

主条目:帮助:编辑页面

关于逻辑运算部分请参考

主条目:帮助:解析器函数

关于数据存储和查询可以使用SMW

主条目:Semantic MediaWiki