Why do i give up semantic mediawiki: Difference between revisions
Jump to navigation
Jump to search
Created page with "Semantic MediaWiki 是 MediaWiki 一系列拓展的合集。宣称是实现 MediaWiki 的语义化。有可能是我还没搞懂,以我目前的认知来看,用它性价比很低,值得直接放弃,后来者想尝试的,建议试试 Cargo。 == 原因 == 我放弃 Semantic MediaWiki 的原因有以下: # 主观原因,composer 在国内网络联通性太差,普通人很难搞定。这将导致新手安装都无法顺畅,更不要谈应用它了 # 客观..." |
|||
(3 intermediate revisions by the same user not shown) | |||
Line 12: | Line 12: | ||
== 理解 == | == 理解 == | ||
[[File:Semantic.png|500px]] | |||
我最初想用 Semantic MediaWiki,是出于自动化需求,我想 MediaWiki 自动帮我搞定开庭日期、案名、案件程序、各类名单。 | 我最初想用 Semantic MediaWiki,是出于自动化需求,我想 MediaWiki 自动帮我搞定开庭日期、案名、案件程序、各类名单。 | ||
Line 21: | Line 23: | ||
万一以后又有了迫切需要 Semantic MediaWiki 的场合,或者我对它的了解更加深入,或者它被我吐槽的点得到完善,我又一次需要它,为了减少以后的折腾时间,记录一下现今对 Semantic MediaWiki 的一些东西的理解及操作。 | 万一以后又有了迫切需要 Semantic MediaWiki 的场合,或者我对它的了解更加深入,或者它被我吐槽的点得到完善,我又一次需要它,为了减少以后的折腾时间,记录一下现今对 Semantic MediaWiki 的一些东西的理解及操作。 | ||
== 安装 == | |||
首先,检查兼容性: | |||
# mediawiki 版本 | |||
# php 版本 | |||
# mbstring 是否安装 | |||
# pcre 版本 | |||
# mysql 版本 | |||
# elasticsearch 版本 | |||
其次,使用 composer 安装,在 mediawiki/composer.local.json 中添加以下: | |||
<pre> | |||
{ | |||
"require": { | |||
"mediawiki/semantic-media-wiki": "~5.0" | |||
} | |||
} | |||
</pre> | |||
最后,安装且更新数据库: | |||
<syntaxhighlight lang="bash" line> | |||
composer update --no-dev | |||
php maintenance/update.php | |||
</syntaxhighlight> | |||
== 维护 == | == 维护 == | ||
disposeOutdatedEntities.php | ; disposeOutdatedEntities.php | ||
翻译:处理并删除已过期的实体 | : 翻译:处理并删除已过期的实体 | ||
说明:在 SMW 中,如果某些实体(如属性或概念)因版本升级或配置变更已失效,这个脚本会将它们清理掉,避免数据库中留存陈旧数据。 | : 说明:在 SMW 中,如果某些实体(如属性或概念)因版本升级或配置变更已失效,这个脚本会将它们清理掉,避免数据库中留存陈旧数据。 | ||
dumpRDF.php | ; dumpRDF.php | ||
翻译:导出现有三元组为 RDF 格式 | : 翻译:导出现有三元组为 RDF 格式 | ||
说明:把数据库中存储的所有语义三元组(Subject–Predicate–Object)输出为标准的 RDF 文件,方便与其它工具或语义网平台交换数据。 | : 说明:把数据库中存储的所有语义三元组(Subject–Predicate–Object)输出为标准的 RDF 文件,方便与其它工具或语义网平台交换数据。 | ||
populateHashField.php | ; populateHashField.php | ||
翻译:批量填充 “smw_hash” 数据库字段 | : 翻译:批量填充 “smw_hash” 数据库字段 | ||
说明:在从旧版本升级到 SMW 3.0.1+ 时,用于一次性为所有实体生成并写入哈希值字段,加快后续的数据比较和查找。 | : 说明:在从旧版本升级到 SMW 3.0.1+ 时,用于一次性为所有实体生成并写入哈希值字段,加快后续的数据比较和查找。 | ||
purgeEntityCache.php | ; purgeEntityCache.php | ||
翻译:一次性清空所有实体相关的缓存条目 | : 翻译:一次性清空所有实体相关的缓存条目 | ||
说明:不仅清除页面缓存,还会删除那些与实体(概念、属性)关联的各种缓存,使下一次访问从头重建数据,常用于调试或重大配置变更后。 | : 说明:不仅清除页面缓存,还会删除那些与实体(概念、属性)关联的各种缓存,使下一次访问从头重建数据,常用于调试或重大配置变更后。 | ||
rebuildConceptCache.php | ; rebuildConceptCache.php | ||
翻译:重建概念(分类)缓存 | : 翻译:重建概念(分类)缓存 | ||
说明:针对 SMW 概念(即分类)生成或更新其在页面侧的缓存视图,确保分类展示或查询结果与底层数据一致。 | : 说明:针对 SMW 概念(即分类)生成或更新其在页面侧的缓存视图,确保分类展示或查询结果与底层数据一致。 | ||
rebuildData.php | ; rebuildData.php | ||
翻译:重建所有语义数据 | : 翻译:重建所有语义数据 | ||
说明:根据你选定的数据存储后端(如默认存储或 Elasticsearch),重新解析所有页面上的语义注释,生成最新的存储索引,适用于大规模更新后。 | : 说明:根据你选定的数据存储后端(如默认存储或 Elasticsearch),重新解析所有页面上的语义注释,生成最新的存储索引,适用于大规模更新后。 | ||
rebuildElasticIndex.php | ; rebuildElasticIndex.php | ||
翻译:重建 Elasticsearch 索引 | : 翻译:重建 Elasticsearch 索引 | ||
说明:当你使用 Elasticsearch 作为 SMW 后端时,此脚本会重新创建搜索索引,确保引擎中包含所有最新的实体文档。 | : 说明:当你使用 Elasticsearch 作为 SMW 后端时,此脚本会重新创建搜索索引,确保引擎中包含所有最新的实体文档。 | ||
rebuildElasticMissingDocuments.php | ; rebuildElasticMissingDocuments.php | ||
翻译:查找并补建 Elasticsearch 中缺失的文档 | : 翻译:查找并补建 Elasticsearch 中缺失的文档 | ||
说明:扫描索引与数据库差异,对于 Elasticsearch 中漏掉的实体,自动调度更新任务,将它们重新加入索引,防止查询遗漏。 | : 说明:扫描索引与数据库差异,对于 Elasticsearch 中漏掉的实体,自动调度更新任务,将它们重新加入索引,防止查询遗漏。 | ||
rebuildFulltextSearchTable.php | ; rebuildFulltextSearchTable.php | ||
翻译:重建全文搜索数据表 | : 翻译:重建全文搜索数据表 | ||
说明:如果你开启了 SMW 的全文检索功能,这个脚本会清空并重建用于全文搜索的专用表,保证搜索内容的完整与准确。 | : 说明:如果你开启了 SMW 的全文检索功能,这个脚本会清空并重建用于全文搜索的专用表,保证搜索内容的完整与准确。 | ||
rebuildPropertyStatistics.php | ; rebuildPropertyStatistics.php | ||
翻译:重建属性使用统计信息 | : 翻译:重建属性使用统计信息 | ||
说明:统计各语义属性在整个 wiki 中出现的次数,并将结果缓存下来,以便在 Special:Statistics 或其他报表页面中快速展示。 | : 说明:统计各语义属性在整个 wiki 中出现的次数,并将结果缓存下来,以便在 Special:Statistics 或其他报表页面中快速展示。 | ||
removeDuplicateEntities.php | ; removeDuplicateEntities.php | ||
翻译:删除未被其他表引用的重复实体 | : 翻译:删除未被其他表引用的重复实体 | ||
说明:在长期使用中可能会产生多余、重复的实体记录,此脚本会识别那些孤立无用的实体并将其从主实体表中移除,节省存储空间。 | : 说明:在长期使用中可能会产生多余、重复的实体记录,此脚本会识别那些孤立无用的实体并将其从主实体表中移除,节省存储空间。 | ||
runImport.php | ; runImport.php | ||
翻译:从导入文件批量导入内容 | : 翻译:从导入文件批量导入内容 | ||
说明:配合 SMW 的导出/备份功能使用,可以将提前准备好的语义数据文件一次性导入到当前 wiki 中。 | : 说明:配合 SMW 的导出/备份功能使用,可以将提前准备好的语义数据文件一次性导入到当前 wiki 中。 | ||
setupStore.php | ; setupStore.php | ||
翻译:初始化或重置数据存储后端 | : 翻译:初始化或重置数据存储后端 | ||
说明:用于安装新站或更换存储方案时,一键创建或更新数据库表结构与索引,保障所选存储后端(MySQL、Elasticsearch 等)与 SMW 版本兼容。 | : 说明:用于安装新站或更换存储方案时,一键创建或更新数据库表结构与索引,保障所选存储后端(MySQL、Elasticsearch 等)与 SMW 版本兼容。 | ||
updateEntityCollation.php | ; updateEntityCollation.php | ||
翻译:批量更新 “smw_sort” 排序字段的字符集/校对规则 | : 翻译:批量更新 “smw_sort” 排序字段的字符集/校对规则 | ||
说明:当你修改了实体存储表的字符集或校对规则(collation)设置后,运行此脚本可让所有已有实体的排序字段重新生成,避免排序异常。 | : 说明:当你修改了实体存储表的字符集或校对规则(collation)设置后,运行此脚本可让所有已有实体的排序字段重新生成,避免排序异常。 | ||
updateEntityCountMap.php | ; updateEntityCountMap.php | ||
翻译:批量填充 “smw_countmap” 计数字段 | : 翻译:批量填充 “smw_countmap” 计数字段 | ||
说明:在升级到 SMW 3.2+ 后,新增了存储实体引用计数的字段,本脚本会一次性为所有实体计算并写入引用次数,以支持统计功能。 | : 说明:在升级到 SMW 3.2+ 后,新增了存储实体引用计数的字段,本脚本会一次性为所有实体计算并写入引用次数,以支持统计功能。 | ||
updateQueryDependencies.php | ; updateQueryDependencies.php | ||
翻译:更新所有包含嵌入式查询的实体 | : 翻译:更新所有包含嵌入式查询的实体 | ||
说明:当实体页面中包含 #ask 等嵌入式查询时,修改了查询逻辑或模板后,运行此脚本可触发重新处理,保证页内查询结果与最新定义一致。 | : 说明:当实体页面中包含 #ask 等嵌入式查询时,修改了查询逻辑或模板后,运行此脚本可触发重新处理,保证页内查询结果与最新定义一致。 |
Latest revision as of 20:23, 29 April 2025
Semantic MediaWiki 是 MediaWiki 一系列拓展的合集。宣称是实现 MediaWiki 的语义化。有可能是我还没搞懂,以我目前的认知来看,用它性价比很低,值得直接放弃,后来者想尝试的,建议试试 Cargo。
原因
我放弃 Semantic MediaWiki 的原因有以下:
- 主观原因,composer 在国内网络联通性太差,普通人很难搞定。这将导致新手安装都无法顺畅,更不要谈应用它了
- 客观原因,MediaWiki 官方舍弃了 Semantic 方案,自行开发了一套语义化方案
- Semantic MediaWiki 的缓存做得很垃圾,删掉的属性一会儿又出现了,逼死强迫症
- Semantic MediaWiki 的速度很慢,改点东西很卡顿,这是 feature,不是 bug,要自行手动运行各类 job 脚本
- Semantic MediaWiki 的 Create Template 缺乏健壮性,套出来的 Forms 与预想有较大出入,又丑又怪
当然,以上可能全是因为我还没有彻底弄懂它,但我已经不想在它身上耗时间了。
理解
我最初想用 Semantic MediaWiki,是出于自动化需求,我想 MediaWiki 自动帮我搞定开庭日期、案名、案件程序、各类名单。
以我现在的了解,Semantic MediaWiki 做的就是一件事:给文字添加一种属性。根据此属性,后续可以查询、自动显示、美化、自动拼装。
但是,操作的繁杂性,与预期的收益,完全不成正比。
在我看来,难度大于七步,入手大于七天,与赚钱无关,就不值得学了。
万一以后又有了迫切需要 Semantic MediaWiki 的场合,或者我对它的了解更加深入,或者它被我吐槽的点得到完善,我又一次需要它,为了减少以后的折腾时间,记录一下现今对 Semantic MediaWiki 的一些东西的理解及操作。
安装
首先,检查兼容性:
- mediawiki 版本
- php 版本
- mbstring 是否安装
- pcre 版本
- mysql 版本
- elasticsearch 版本
其次,使用 composer 安装,在 mediawiki/composer.local.json 中添加以下:
{ "require": { "mediawiki/semantic-media-wiki": "~5.0" } }
最后,安装且更新数据库:
composer update --no-dev
php maintenance/update.php
维护
- disposeOutdatedEntities.php
- 翻译:处理并删除已过期的实体
- 说明:在 SMW 中,如果某些实体(如属性或概念)因版本升级或配置变更已失效,这个脚本会将它们清理掉,避免数据库中留存陈旧数据。
- dumpRDF.php
- 翻译:导出现有三元组为 RDF 格式
- 说明:把数据库中存储的所有语义三元组(Subject–Predicate–Object)输出为标准的 RDF 文件,方便与其它工具或语义网平台交换数据。
- populateHashField.php
- 翻译:批量填充 “smw_hash” 数据库字段
- 说明:在从旧版本升级到 SMW 3.0.1+ 时,用于一次性为所有实体生成并写入哈希值字段,加快后续的数据比较和查找。
- purgeEntityCache.php
- 翻译:一次性清空所有实体相关的缓存条目
- 说明:不仅清除页面缓存,还会删除那些与实体(概念、属性)关联的各种缓存,使下一次访问从头重建数据,常用于调试或重大配置变更后。
- rebuildConceptCache.php
- 翻译:重建概念(分类)缓存
- 说明:针对 SMW 概念(即分类)生成或更新其在页面侧的缓存视图,确保分类展示或查询结果与底层数据一致。
- rebuildData.php
- 翻译:重建所有语义数据
- 说明:根据你选定的数据存储后端(如默认存储或 Elasticsearch),重新解析所有页面上的语义注释,生成最新的存储索引,适用于大规模更新后。
- rebuildElasticIndex.php
- 翻译:重建 Elasticsearch 索引
- 说明:当你使用 Elasticsearch 作为 SMW 后端时,此脚本会重新创建搜索索引,确保引擎中包含所有最新的实体文档。
- rebuildElasticMissingDocuments.php
- 翻译:查找并补建 Elasticsearch 中缺失的文档
- 说明:扫描索引与数据库差异,对于 Elasticsearch 中漏掉的实体,自动调度更新任务,将它们重新加入索引,防止查询遗漏。
- rebuildFulltextSearchTable.php
- 翻译:重建全文搜索数据表
- 说明:如果你开启了 SMW 的全文检索功能,这个脚本会清空并重建用于全文搜索的专用表,保证搜索内容的完整与准确。
- rebuildPropertyStatistics.php
- 翻译:重建属性使用统计信息
- 说明:统计各语义属性在整个 wiki 中出现的次数,并将结果缓存下来,以便在 Special:Statistics 或其他报表页面中快速展示。
- removeDuplicateEntities.php
- 翻译:删除未被其他表引用的重复实体
- 说明:在长期使用中可能会产生多余、重复的实体记录,此脚本会识别那些孤立无用的实体并将其从主实体表中移除,节省存储空间。
- runImport.php
- 翻译:从导入文件批量导入内容
- 说明:配合 SMW 的导出/备份功能使用,可以将提前准备好的语义数据文件一次性导入到当前 wiki 中。
- setupStore.php
- 翻译:初始化或重置数据存储后端
- 说明:用于安装新站或更换存储方案时,一键创建或更新数据库表结构与索引,保障所选存储后端(MySQL、Elasticsearch 等)与 SMW 版本兼容。
- updateEntityCollation.php
- 翻译:批量更新 “smw_sort” 排序字段的字符集/校对规则
- 说明:当你修改了实体存储表的字符集或校对规则(collation)设置后,运行此脚本可让所有已有实体的排序字段重新生成,避免排序异常。
- updateEntityCountMap.php
- 翻译:批量填充 “smw_countmap” 计数字段
- 说明:在升级到 SMW 3.2+ 后,新增了存储实体引用计数的字段,本脚本会一次性为所有实体计算并写入引用次数,以支持统计功能。
- updateQueryDependencies.php
- 翻译:更新所有包含嵌入式查询的实体
- 说明:当实体页面中包含 #ask 等嵌入式查询时,修改了查询逻辑或模板后,运行此脚本可触发重新处理,保证页内查询结果与最新定义一致。