欢迎来到THBWiki!
如果您是第一次来到这里,请点击右上角注册一个帐户
有任何意见、建议、求助、反馈都可以在
讨论板
提出
THBWiki以专业性和准确性为目标,如果你发现了任何确定的错误或疏漏,可在登录后直接进行改正
查看“帮助:SMW”的源代码
←
帮助:SMW
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
少女
您没有权限编辑
帮助
命名空间内的页面。
您可以查看和复制此页面的源代码。
===语义注释函数=== 本段落说明的函数用于语义注释,主要用途为给页面定义属性,给属性赋值等。<br /> 包含以下四种函数: *[[#set|set]],用于给页面指定属性与值。 *[[#subobject|subobject]],用于给页面指定子对象,给子对象指定属性与值。 *[[#set_recurring_event|set_recurring_event]],用于给页面声明周期发生的事件,比如定期展会、周年纪念日等。 *[[#declare|declare]],用于在模板页面中,将模板的输入参数值赋给属性,方便模板编写。 ====set==== {{帮助SMW-测试警告-小}} 解析函数<code>#set</code>允许用户注释数据,即给属性赋值。<br /> 这样做就可以无需使用<code><nowiki>[[属性名::属性值]]</nowiki></code>这样的声明。<br /> 从[https://www.semantic-mediawiki.org/wiki/Semantic_MediaWiki_1.9.0 SMW 1.9.0]版本起,<code>#set</code>函数还提供了特殊参数(见下文),来实现更多功能。 还是[[博丽灵梦]]的例子,若要给她的页面声明“种族”和“能力”属性,写成下面的样子: <pre> {{#set: 种族=人类 |能力=主要拥有在空中飞翔程度的能力 }} </pre> 此解析函数不返回任何值,只将属性值作为数据存储起来。<br /> 上面代码的作用相当于使用如下的[[#文本注释|文本注释]]: <pre> [[种族::人类| ]] [[能力::主要拥有在空中飞翔程度的能力| ]] </pre> 不必再使用这样的文本注释了,你可以使用上方的<code>#set</code>函数来替代。 你还可以给能接受多个值的属性赋多个值,这里假设“能力”属性能接受多值: <pre> {{#set: 能力=主要拥有在空中飞翔程度的能力 |能力=操纵灵气的能力 |能力=在天空飞行的能力 }} </pre> 从[https://www.semantic-mediawiki.org/wiki/Semantic_MediaWiki_1.9.0 SMW 1.9.0]版本起,你可以使用分隔符参数来给一个属性赋多个值,详见下文。 ;使用“分隔符”参数 :[https://www.semantic-mediawiki.org/wiki/Semantic_MediaWiki_1.9.0 SMW 1.9.0]给<code>#set</code>函数引入了<code>|+sep=...</code>参数。 :此参数用于声明一个分隔符,这个分隔符用于分隔给一个属性赋的多个值。 :本维基SMW 2.1.1版本可以使用此功能。 :;语法格式: ::{{pre|<nowiki> {{#set: |属性名1=值1,值2|+sep=, |属性名2=值1;值2;值3;|+sep=; ... }} </nowiki>}} ::此处举例使用的是全角标点作为分隔符,在中文页面上较为方便。 :;例子: ::仍然使用灵梦的“能力”属性为例: ::{{pre|<nowiki> {{#set: |能力=主要拥有在空中飞翔程度的能力,操纵灵气的能力,在天空飞行的能力|+sep=, }} </nowiki>}} ::事实上,不声明<code>|+sep=...</code>,也可以用管道符<code>|</code>来分隔。 ::声明了<code>|+sep=</code>,或者<code>|+sep</code>,但没有指明分隔符的情况下,默认使用半角逗号<code>,</code>来分隔。 ::如下面这些声明都是允许的: ::{{pre|<nowiki> {{#set: |登场作品=红魔乡,妖妖梦,萃梦想,|+sep= |登场作品=永夜抄,花映冢,文花帖|+sep |登场作品=风神录|绯想天|地灵殿 |登场作品=星莲船 }} </nowiki>}} ::一串值末尾的分隔符不会起作用。 ::像上面这样分好几行声明的话,“登场作品”会包括上述声明的所有值,与一行只声明一个值时相同。 ====subobject==== {{帮助SMW-测试警告-小}} 解析函数<code>#subobject</code>允许用户注释与子对象有关的内容。<br /> 子对象类似于页面,它也有自己的属性及属性的值,但子对象在维基中没有词条页面。<br /> 子对象可以用于给页面的众多属性及值“分组”,而不用新建辅助页面。<br /> 使用[[#特殊属性|特殊属性]]“'''有无子对象'''”,可以查找使用了本函数来指定属性值的页面。 解析函数<code>#set_recurring_event</code>会使用子对象来存储属性值(详见[[#set_recurring_event|set_recurring_event]]函数段落)。 ;语法格式 :{{pre|<nowiki> {{#subobject:子对象名称 |属性1=值 |属性2=值1,值2,值3|+sep=, |属性3=值1|值2|值3 |... }} </nowiki>}} :和<code>#set</code>函数一样,对于多值的属性,可以使用分隔符来分隔多个值。 :你可以参看[[#set|set]]函数的“使用‘分隔符’参数”部分。本段落后文中有分隔符发展的过程介绍。 :对于上方示例代码,解释如下: :可以用<code>+sep=</code>来指定分隔符(如上方代码的“属性2”使用了全角逗号<code>,</code>作为分隔符,在中文页面上较为方便)。 :在使用了<code>+sep=</code>后若指定分隔符留空,则默认使用半角逗号<code>,</code>作为分隔符。 :在不使用<code>+sep=</code>的情况下,可以直接使用管道符<code>|</code>作为分隔符。 :;说明: ::与<code>#set</code>函数类似,<code>#subobject</code>函数也是一种静默注释,它为属性赋值时不对页面输出任何字符。 ;给相同属性指定多值 :;多行书写: ::{{pre|<nowiki> {{#subobject:子对象名 属性1=值1 属性1=值2 属性2=值1 属性2=值2 ... }} </nowiki>}} :;一行书写,使用管道符分隔: ::从[https://www.semantic-mediawiki.org/wiki/SMW_1.8.0 SMW 1.8.0]版本起,可以使用管道符<code>|</code>来分隔多个值。 ::添加此规定不会给属性值的输入增加限制,且大大方便了多值的输入,下面这些代码和上面的例子作用一样: ::{{pre|<nowiki> {{#subobject:子对象名 属性1=值1|值2 属性2=值1|值2 ... }} </nowiki>}} :;一行书写,使用指定分隔符: ::从[https://www.semantic-mediawiki.org/wiki/SMW_1.9.0 SMW 1.9.0]版本起,加入了<code>|+sep=...</code>来指定分隔符: ::{{pre|<nowiki> {{#subobject:子对象名 |属性1=值1;值2|+sep=; |属性2=值1,值2|+sep=, ... }} </nowiki>}} ;指定标识符 :可以给子对象命名一个“标识符”,用来直接说明一组属性值是哪种类型的数据。 :;命名标识符: ::比如,这个子对象给[[博丽灵梦]]页面说明她在作品中的登场信息,用<code>登场信息</code>来标识这个子对象: ::{{pre|<nowiki> {{#subobject:登场信息 |红魔乡登场=自机 |妖妖梦登场=自机 |萃梦想登场=自机 |永夜抄登场=自机,四面BOSS A|+sep=, |花映冢登场=自机|敌机 ... }} </nowiki>}} ::命名标识符的前五个字符里不允许出现半角句点<code>.</code>,这种带点的命名是留给一些扩展用的。 :;无名标识符: ::[https://www.semantic-mediawiki.org/wiki/SMW_1.8.0 SMW 1.8.0]支持给没有命名的子对象分配无名标识符(哈希编号)。 ::如果两个子对象实体在同一页面中,且内容相同,则它们的哈希值也相同,所以只有一个子对象实体会被存储并可用于查询。 ::{{pre|<nowiki> {{#subobject:| ... }} </nowiki>}} ::标识符开头带有: ::*<code>_QUERY...</code>标记查询元容器; ::*<code>_ERR...</code>标记错误容器; ;指定排序值 :[https://www.semantic-mediawiki.org/wiki/SMW_2.0 SMW 2.0]版本引入了<code>|@sortkey=...</code>,允许给子对象指定一个任意的排序值。 :排序值是大小写敏感的,也就是说,排序值被当作“字符串”来存储,但不会显示出来。 :子对象的排序值可以像其他维基页面的排序值一样,用作排序。 :比如还是上方灵梦登场信息的例子: :{{pre|<nowiki> {{{{#subobject:登场信息 |红魔乡登场=自机 |妖妖梦登场=自机 |萃梦想登场=自机 |永夜抄登场=自机,四面BOSS A|+sep=, |花映冢登场=自机|敌机 ... |@sortkey=A }} </nowiki>}} :此处的排序值就是“A”。 ;概念说明 :;使用属性: ::如果两个子对象内的声明相同,则它们就会被当作同一个子对象,技术上使用哈希值来比较两者。 ::但如果它们描述的内容不一致,如使用了命名标识符,则会被视为不同。 ::给内容相同的两个子对象指定不同的名字,会创建两个独立的子对象实体。 ::比如假设当前页面用于记录各个角色的基本信息,有可能出现: ::{{pre|<nowiki> {{#subobject: |种族=人类 }} {{#subobject: |种族=人类 }} </nowiki>}} ::这两个子对象就是相同的。 ::然而: ::{{pre|<nowiki> {{#subobject:灵梦 |种族=人类 }} {{#subobject:魔理沙 |种族=人类 }} </nowiki>}} ::这两个子对象虽然在声明内容上相同,但命名不同,一个表示的是<code>当前标题#灵梦</code>,另一个是<code>当前标题#魔理沙</code>。 ::另一种区分方式是使用<code>|@sortkey=...</code>给两个子对象指定排序值: ::{{pre|<nowiki> {{#subobject: |种族=人类 |@sortkey=灵梦 }} {{#subobject: |种族=人类 |@sortkey=魔理沙 }} </nowiki>}} ::这两个子对象会被当作不同的实体,可以分别查询。 :;使用分类: ::对于[https://www.semantic-mediawiki.org/wiki/SMW_2.3 SMW 2.3],可以使用<code>|@category=...</code>来给子对象指定分类。 ::指定了分类的子对象,在查询该分类时可以找到,但是不会出现在“分类:...”的页面上,因为子对象是SMW引入的概念,与MW无关。 ::由于本地维基SMW版本为2.1.1,无法使用上述分类功能,但可以只用属性功能来实现: ::*使用属性来代替分类,创建一个类似分类名称的属性,比如“属性:主角二人组”。 ::*这里不考虑这个属性的值。 ::*使用[[#特殊属性|特殊属性]]“'''所属的子属性'''”,可以将这些类似分类的属性建立一个嵌套层次结构,比如“属性:主角二人组”是“属性:新作角色”的一员,“属性:新作角色”又是“属性:官方角色”的一员。使用这种方式来模仿分类的层次结构。 ::*对分类的查询使用<code><nowiki>[[分类:新作角色]]</nowiki></code>,可以查询分类和其子分类的内容;对于此处,我们可以使用<code><nowiki>[[新作角色::+]]</nowiki></code>来查询,也能查询属性和其子属性中的页面和子对象。 ;查询子对象 :此处仅作简单描述,详见[[#查询子对象|查询子对象]]。 :子对象可以当作页面来使用。 :查询子对象的简单方法是查询子对象中包含的独一无二的属性,如: :{{pre|<nowiki> {{#ask: [[红魔乡登场::+]] |?永夜抄登场 |?风神录登场 ... }} </nowiki>}} :这里例子用到的是角色的登场信息,在本段落上文中有描述。 :此处查询的是在红魔乡中有登场的角色,在其他几作中的登场情况。 :(本例为虚构,所以测试此段代码是不会有结果的,故不标记为绿色代码。) :为了在查询时更加方便,你可以给子对象添加“伪”属性。 :比如给所有具有登场信息的角色子对象添加“有登场信息=1”,则查询<code><nowiki>[[有登场信息::1]]</nowiki></code>,即可找到所有具备登场信息的子对象。 :关于[[#ask|ask]]函数的用法请见其自己的说明段落。 ====set_recurring_event==== {{帮助SMW-测试警告-小}} 解析函数<code>#set_recurring_event</code>用于给维基页面设置重复事件。<br /> 重复事件表示按照预先规划的时间,发生不止一次的事件,比如每周会议,周年纪念日和生日等。<br /> 也可以是时长为好几天的一个事件,比如展会等。 在SMW中,重复事件的日期可以使用<code>#set_recurring_event</code>函数来定义,只需将代码写在该事件的页面上即可。<br /> 此函数创建的属性与值都在一个特殊的子对象里。关于子对象,可以参看[[#subobject|subobject]]函数的解释。 此函数使用以下参数,函数中参数输入的顺序没有限制: {|{{PrettyTable}} !{{hl1}}|参数名 !{{hl1}}|说明 |--- |{{color:gray|''无名称''}}(在<code>:</code>后) |属性的名称,它用于连接子对象和页面。这个属性属于子对象,属性的值为页面。具体例子见下文。此参数需在函数的半角冒号<code>:</code>后输入。 |--- |property |属性的名称,用于记录事件发生的日期,[[#数据类型|数据类型]]为'''日期'''。 |--- |start |系列事件的开始日期,可以包括时刻。 |--- |end |系列事件的结束日期,可以包括时刻。此参数是可选的。 |--- |unit |事件发生间隔时间的单位,可以是<code>year</code>(年)、<code>month</code>(月)、<code>week</code>(周)或<code>day</code>(日)。此参数是可选的,默认为<code>day</code>(日)。 |--- |period |事件发生间隔几个时间单位。此参数是可选的,默认为<code>1</code>。 |--- |limit |创建重复事件的总数。如果使用了<code>end</code>参数,此参数会被忽略。此参数是可选的,默认为100,默认值由[https://www.semantic-mediawiki.org/wiki/Help:$smwgDefaultNumRecurringEvents $smwgDefaultNumRecurringEvents]参数控制。 |--- |week number |事件发生在每月的第几周。当间隔时间的单位被设为<code>month</code>(月)时有效。可接受负值,负值表示每月的倒数第几周。星期几是由开始日期决定的。 |--- |include |需要额外增加的事件发生日期,使用半角分号<code>;</code>分隔。此参数是可选的。 |--- |exclude |需要从系列事件中除去的日期,使用半角分号<code>;</code>分隔。此参数是可选的。 |--- |{{color:gray|''自定义''}} |用户在函数中还可以自定义一些属性与值,这些属性与值都会赋给子对象。 |} 如果没有用<code>end</code>指定结束日期,也没有用<code>limit</code>指定总数限制,则创建的事件日期总数将由[https://www.semantic-mediawiki.org/wiki/Help:$smwgDefaultNumRecurringEvents $smwgDefaultNumRecurringEvents]参数控制,此参数默认值为100。<br /> 如果用<code>end</code>指定了结束日期,则可以超过100,但还有一个[https://www.semantic-mediawiki.org/wiki/Help:$smwgMaxNumRecurringEvents $smwgMaxNumRecurringEvents]参数限制此函数能够创建的最大事件日期数。<br /> 不论用<code>start</code>和<code>end</code>指定的开始和结束日期为何值,最大的事件日期数都由该参数限制,默认为500。<br /> 这两个控制参数都可以在LocalSettings.php中修改。 ;例子 :下面这个例子使用了[[Comic Market]]的规则,冬季展会为每年12月29日举办。 :则在[[Comic Market]]页面上应写: :{{pre|<nowiki> {{#set_recurring_event:展会 |property=展会日期 |start=December 29, 2007 10:00 am |end=December 29, 2017 5:00 pm |unit=year |period=1 |include=December 28, 2008 10:00 am;December 28, 2014 10:00 am |exclude=December 29, 2008 10:00 am;December 29, 2014 10:00 am }} </nowiki>}} :此段代码创建了一系列子对象,这些子对象都有“展会”属性,值为[[Comic Market]]。 :每个子对象都有“展会日期”属性,值分别为2007年的12月29日到2017年12月29日之间的所有12月29日。 :还执行了例外,将2008年和2014年的“展会日期”改为了12月28日。 :下面这个例子使用[[东方灵异传]]的发售日期,以确定每年的东方首作发行纪念日。 :假设该页面有“发售日期”属性,则在纪念日的页面上应写: :{{pre|<nowiki> {{#set_recurring_event:发行纪念日 |property=纪念日期 |start={{#show:东方灵异传|?发售日期}} |unit=month |period=12 }} </nowiki>}} :此段代码创建了一系列子对象,这些子对象都有“发行纪念日”属性,值为[[东方灵异传]]。 :每个子对象都有“纪念日期”属性,值分别为1997年的8月15日以来的所有8月15日,由于没有指定<code>limit</code>,最多创建100个纪念日。 :如果想把上面的“发行纪念日”推广给全部作品用,可以将它写在模板里。 :模板使用<code>|发售日期=...</code>参数来输入发售日期,则应写: :{{pre|<nowiki> {{#set_recurring_event:发行纪念日 |property=纪念日期 |start={{{发售日期|}}} |unit=month |period=12 }} </nowiki>}} ;使用带时刻的日期时需注意 :<code>#set_recurring_event</code>函数在没有说明时刻的情况下才会指定为日期。 :你可以在重复事件中指定时刻,但使用时要注意两点: :*用<code>exclude</code>排除日期时也需指定时刻。当<code>#set_recurring_event</code>函数执行时,它会比较排除日期的数组和计算得到的重复日期,计算的日期此时包含时刻。如果指定了开始日期为下午7:00,则排除时也要写上这个时刻。如果使用自动表单填写,则最好在单独的字段中输入时刻,然后将其自动添加到开始日期和排除日期。或者使用额外的自定义属性。 :*结束日期也需要时刻,重复事件将在该时刻结束,而不是当天午夜。 ====declare==== {{帮助SMW-测试警告-小}} 解析函数<code>#declare</code>允许用户将模板参数声明为属性值。 如果你在用[[模板:官方角色信息]]写[[博丽灵梦]]页面,则应写:<br /> {{pre|<nowiki> {{官方角色信息| |人物名=博丽灵梦 |日文名=博麗 霊夢(はくれい れいむ) |英文名=Hakurei Reimu |种族=人类 |职业=巫女 |能力=主要拥有在空中飞翔程度的能力 }} </nowiki>}} 在模板页面,你可以使用<code><nowiki>[[角色中文名::{{{人物名}}}]]</nowiki></code>这样的注释来给“角色中文名”属性赋值。<br /> 但这会让已经十分复杂的模板语法变得更加复杂。 现在,可以使用下面的方法在模板中集中声明属性值,如: {{pre|<nowiki> {{#declare:角色中文名=人物名 |角色日文名=日文名 |角色英文名=英文名 |种族=种族 |角色职业=职业 |能力=能力 }} </nowiki>}} 等号<code>=</code>的左边是属性名称,右边是模板的参数名称。 这个函数的原本想法是允许在模板中声明模板参数,就像使用编程语言时,声明函数的变量一样。<br /> 从长远来看,这既能提高页面内容的质量,又可以简化用户界面。此函数的出现简化了模板的代码。
返回
帮助:SMW
。
导航菜单
个人工具
创建账号
登录
命名空间
帮助
讨论
查看
阅读
源码
查看历史
更多
搜索
常用
首页
东方Project
上海爱丽丝幻乐团
ZUN
幻想乡
幻想乡年表
东方年表
东方同人规约
近期新闻
沙盒(建议使用)
讨论板
加入我们
官方作品
官方游戏
旧作
东方灵异传
东方封魔录
东方梦时空
东方幻想乡
东方怪绮谈
东方红魔乡
东方妖妖梦
东方永夜抄
东方花映塚
东方风神录
东方地灵殿
东方星莲船
东方神灵庙
东方辉针城
东方绀珠传
东方天空璋
东方鬼形兽
东方虹龙洞
东方兽王园
小数点射击游戏
东方文花帖
东方文花帖DS
妖精大战争
弹幕天邪鬼
秘封噩梦日记
弹幕狂们的黑市
黄昏边境合作游戏
东方萃梦想
东方绯想天
东方非想天则
东方心绮楼
东方深秘录
东方凭依华
东方刚欲异闻
官方音乐
原曲列表
非音乐CD音乐列表
音乐CD曲目列表
蓬莱人形
莲台野夜行
梦违科学世纪
卯酉东海道
大空魔术
未知之花 魅知之旅
鸟船遗迹
伊奘诺物质
燕石博物志
旧约酒馆
虹色的北斗七星
七夕坂梦幻能
幺乐团的历史系列
幺乐团的历史 vol.1
幺乐团的历史 vol.2
幺乐团的历史 vol.3
幺乐团的历史 vol.4
幺乐团的历史 vol.5
格斗游戏OST
幻想曲拔萃
全人类的天乐录
核热造神非想天则
暗黑能乐集心绮楼
深秘乐曲集
深秘乐曲集·补
完全凭依唱片名录
贪欲之兽的音乐
商业出版物附带CD
官方书籍
东方香霖堂
东方三月精
第一季
月之妖精
第二季
第三季
第四季
东方文花帖
风之号外
东方紫香花
六十年不见的紫香花
东方儚月抄
漫画
小说
四格
东方茨歌仙
东方铃奈庵
东方醉蝶华
东方智灵奇传
东方求闻史纪
记忆幻想乡
东方求闻口授
魔理沙的魔法书
宇佐见的魔法书
东方外来韦编
东方文果真报
东方人妖名鉴
宵暗篇
常世篇
幻想Narrato Graph
官方角色
公式资料
附带文档
游戏对话
官方作品光盘信息
角色自称用词表
官作译名更改记录
原作物品列表
出典文献列表
其他ZUN参与的作品
西方Project
黄昏酒场
东方关联人物
游戏攻略
东方相关活动
从第二家开始的广播
东方STATION
数码游戏博览会
PoriPori☆Club
niconico超会议
斗会议
niconico原创游戏祭
枯萎Radio
GDGD
其他相关项目
东方我乐多丛志
东方四方山新闻
Play,Doujin!
东方电书流通
东方音乐流通
二次创作与活动
展会及活动导航
Comic Market
博丽神社例大祭
博丽神社例大祭SP
博丽神社秋季例大祭
博丽神社例大祭in台湾
海外博丽神社例大祭
博丽神社歌谣祭
博丽神社崇敬会相关活动
COMICUP
上海THONLY
东方Only活动
东方红楼梦
角色Only活动
作品Only活动
地区Only活动
其他地区举办的展会
其他展会
M3
COMIC1
展会作品列表
展会作品数量
展会同人志列表
展会专辑列表
展会软件列表
展会视频列表
商业二次创作
电脑游戏
东方月神夜
家用机游戏
Play,Doujin
手机游戏
东方大炮弹
东方LostWord
东方Dungeon Dive
东方弹幕神乐
东方幻想Eclipse
同人二次创作
同人社团列表
同人志分类
同人专辑分类
同人专辑搜索
原曲作品数量
同人软件列表
Steam游戏列表
同人角色列表
同人视频列表
其他形式同人
同人文章列表
同人画师列表
同人封面角色
东方相关周边
PVCFigure
GarageKit
小型物品
其他形式周边
MUGEN
THB相关项目
THB策划
中文东方人气投票
东深见讲坛
幻想乡柱状地图
THB衍生
同人专辑搜索
原曲认知测验
东方相关QQ群组列表
THB媒体
微博
Bilibili
直播间
GitHub
THB协力
博丽神主ZUN微博
东方我乐多丛志
MineCraft幻想乡
京都幻想剧团
幻奏盛宴
功能与帮助
最近更改
随机浏览
编写规范
收录方针
命名规范
同人社团
同人音乐
封面图片
二次设定
编辑帮助
基础帮助
常用模板
进阶代码
函数用法
编写翻译表
语义维基
样式类用法
颜色列表
工具
链入页面
相关更改
特殊页面
页面信息
其他
联系管理员
关于THBWiki
捐款支持
语言
English
italiano
日本語
中文