本文档页面适用于1.0到1.5.6的所有SMW版本。
本页解释了页面可以对单位的显示和转换进行更多控制的方式。单位可以用于数据类型的属性编号,并使注释更加灵活:每个人都可以在他或她的首选单位中查看和输入数据,而不限制相互理解。例如,有些人可能更喜欢以“英里”表示的距离,而不是以“公里”表示的。在其他情况下,如果“微米”更合适,则可能不适合以“km”为单位显示距离。
带有单位转换的自定义类型[编辑]
SMW对一些可以处理单元的类型(例如。温度),但可以轻松添加更多内容。支持单位的类型可以接受、转换和显示几个不同单位的值。你可以在事实箱的文章,如“ow:柏林”,其中面积以多个单位表示。
为了支持这些功能,SMW需要知道如何将值从一个单元转换为另一个单元。这在许多情况下相当容易,但在其他情况下也可能涉及更复杂的计算。我们区分了两种情况:
- 所需单位之间的转换为成比例的也就是说,您只需将一个值乘以一个固定的转换因子,即可得到另一个单位的值。例如,这是在公里和英里之间进行转换的情况。
- 单位之间的转换为不成比例需要进行更复杂的计算。例如,发生这种情况的原因是温度,因为你需要加法和乘法才能从°C到°F。
对于第一类的所有单位转换,您可以轻松创建支持这些单位的自定义类型。对于第二种情况,我们在下面讨论了一些可能性。
使用比例单位转换创建新数据类型[编辑]
在考虑创建新的数据类型之前,请通过咨询确保该类型不存在特殊:类型。
如果所需类型不存在,则可以轻松创建新类型。首先,您需要在Type命名空间中创建一个页面。例如,您可能想创建[[Type:Power]]。在这篇新文章中,你应该先写一些关于这种新型的目的和用法的句子。在我们的例子中,这意味着我们指的是通常以瓦特。这也有助于其他人在搜索关键字时查找和重用您的类型。
要指定支持的单位,可以使用特殊属性对应于。例如,要指定主机对于power的新数据类型,我们添加了
[[对应::1 W]]
值“1W”表示两件事:(1)类型理解单位“W”,(2)单位“W“是它的主要单位(这就是“1”的含义)。直观地说,该声明说“这种类型的一个数量对应于1W。”很容易指定更多的单位,例如。
[[对应::0.001 kW]][[对应::0.0013410220 hp]]。
这意味着该型号还可以理解单位“kW”和“hp”,并且主单元的1个数量对应于0.001 kW和0.0013410220 hp。通过这种方式,您可以支持任意单元,只要它们与主单元的关系可以用这种简单的方式描述即可。
在许多情况下,指代一个单位有多种方式。例如,我们希望允许用户编写“W”和“Watt”,甚至“Watts”。这样做的一个简单方法是用“,”分隔额外的单元,而不是用相同的因子生成多个“对应于”语句。例如,我们可以写:
[[对应:1 W,Watt,Watts]][[对应:0.0013410220 hp,bhp,马力]]
“中的第一个符号对应于::1xx个是主单元。保存新类型的页面后,“对应于”语句将作为特殊属性显示在其factbox中。现在可以像使用任何其他类型一样使用该类型。例如,我们可以创建一个新的特性:发动机功率这是power类型,通过在其页面中添加:
[[具有类型::电源]]
此属性将理解其数据类型中“对应”语句中定义的所有单位,并显示它们之间的转换(没有重复项,即SMW不显示“W”和“Watt”)。在内部,这些值将全部转换为主单位RDF导出也将显示此单位的值。wiki中的单位显示具有高度的可定制性,无需涉及主单位,请参阅下文。
不成比例的单位换算[编辑]
请注意,您只能指定比例转换因子,即乘数。因此,不同单位不能有不同的基数,对数刻度转换等。因此,无法创建将摄氏度转换为华氏度的自定义温度类型。在温度方面,SMW已经提供了内置的数据类型温度它处理这个转换,但在其他情况下可能不是这样。
SMW不允许在wiki中指定自定义的非比例单位。一种解决方法是使用数据类型编号其中还包括接受给定数字后的单位字符串。类型不知道如何在这些值之间进行转换,但它仍然可以识别单位,并能够区分不同的单位。如果某个外来类型的所有用户都同意使用相同的单元,那么功能将类似于具有真正的单元支持。如果有人仍然使用另一个单位,那么给定的值至少不会与其他单位中的值混淆。
解决这种情况的一种更精细的方法是编写一个实现所需转换的小脚本。以这种方式扩展SMW并不困难,您可以简单地复制和调整Type:Temperature的代码(它低于70行,包括注释)。实现这样的自定义类型后,需要使用type:Number的属性可以更改为新类型,而不会对现有项目产生任何负面影响。当遇到不支持的单位时,自定义类型的行为仍将类似于简单的数字数据类型。
自定义单位显示[编辑]
通过使用浮点数,单个类型可以支持多种单位。例如,单个长度类型可以轻松支持光年和纳米。然而,如果有人使用属性“Elevation”来指定山的高度,那么以光年或纳米为单位显示这个值几乎没有用处。
SMW允许您指定属性应该从其类型支持的所有单位中显示哪些单位。此信息特定于属性:两个属性都可以使用[[Type:Length]],但在wiki中仍具有不同的外观。如果显示时没有给定首选项,则属性将显示其类型的所有单位,首先显示主单位(换算系数为1的单位)。
要指定自定义显示单位,请添加特殊属性显示单位在属性的页面中,指出要用逗号分隔显示的每个单位。例如,文章属性:高度可以包含以下语句:
[[显示单位::公里、英尺、英里]]
这导致factbox仅显示属性Height值的这三个单位,即使其[[Type:Length]]可能支持十几个其他单位。类似地,每个此类值的工具提示将显示这些转换。此自定义适用于使用具有单元支持的类型的所有属性,无论该类型是自定义的还是内置的。
如果更改第一个显示单位,请考虑将类型的“标准单位”作为其他显示单位之一显示给用户,因为SMW在存储值时仍会将值转换为标准单位。