Semantic Wiki实现企业计算机组件管理的方法及显示问题咨询
企业计算机组件(HDD)Semantic Wiki管理方案指南
嘿,作为折腾过Semantic Wiki做企业资产管理的老玩家,我来帮你一步步理清怎么实现这个需求~
一、先搞定存储室的层级结构
存储室的层级很好解决,用语义属性+递归查询就能实现:
- 先创建一个语义属性
Has parent storage room,属性类型设为「页面」(关联其他存储室页面)。 - 比如创建顶层页面「总部存储区」,然后创建「一楼存储室A」页面,在页面里添加:
要是还有下级,比如「一楼存储室A-1隔间」,就加[[Has parent storage room::总部存储区]][[Has parent storage room::一楼存储室A]]。 - 要展示层级结构,用
#ask查询生成树形视图:
这样就能自动渲染出存储室的层级关系了。{{#ask: [[Has parent storage room::+]] | ?Has parent storage room | format=tree | mainlabel=存储室名称 }}
二、HDD的记录方案:单独页面 vs Subobject
1. 是否需要每个HDD单独页面?
看你的需求:
- 如果每个HDD需要单独的详情页(比如要加维修记录、备注、历史变更日志),单独页面更合适,后续扩展更灵活。
- 如果只是纯粹的结构化数据管理,不需要额外内容,Subobject是更轻量化的选择,不用创建大量独立页面。
2. Subobject的内容显示问题(除了Ask查询)
你说Subobject不能直接显示?其实可以用#show函数+自定义模板来直接渲染Subobject内容,步骤如下:
第一步:定义语义属性
先把需要的属性创建好:
Has status:枚举类型,选项设为「在用/闲置」Belongs to computer:页面类型,关联计算机页面Located in storage room:页面类型,关联存储室页面Serial number:字符串类型Specifications:文本类型
第二步:在汇总页面添加Subobject
比如创建「企业HDD资产汇总」页面,添加Subobject:
{{#subobject: HDD-SN123456 | Has status = 在用 | Belongs to computer = 研发部-计算机001 | Serial number = SN123456 | Specifications = 1TB SATA 3.0 7200转 }} {{#subobject: HDD-SN789012 | Has status = 闲置 | Located in storage room = 一楼存储室A | Serial number = SN789012 | Specifications = 2TB NVMe PCIe 4.0 }}
第三步:创建显示模板
创建Template:HDD Subobject Card,内容如下:
<div style="border:1px solid #eee; padding:10px; margin:10px 0; border-radius:4px;"> <h4>HDD 序列号:{{{Serial number}}}</h4> <ul> <li>状态:{{{Has status}}}</li> {{#if: {{{Belongs to computer|}}} | <li>所属计算机:[[{{{Belongs to computer}}}]]</li> | <li>所在存储室:[[{{{Located in storage room}}}]]</li> }} <li>规格:{{{Specifications}}}</li> </ul> </div>
第四步:在汇总页面渲染Subobject
回到「企业HDD资产汇总」页面,添加这段代码:
{{#show: {{FULLPAGENAME}} | ?Has subobject | format=template | template=HDD Subobject Card }}
这样就能直接在页面上把所有Subobject的内容以卡片形式展示出来,不用只依赖Ask查询啦。
3. Subobject的替代方案
如果不想用Subobject,还有两个常用方案:
方案一:数据表单(Data Forms)
适合给非技术用户用,步骤:
- 创建一个
Form:HDD表单,把所有需要的字段(状态、所属计算机等)对应到之前的语义属性。 - 用户可以通过「添加数据」功能,选择这个表单填写信息,系统会自动生成结构化的页面内容(或者在汇总页面批量添加条目),同时语义属性会被自动标记,方便后续查询。
方案二:模板+内联属性
创建一个Template:HDD Entry模板,内容如下:
[[Has status::{{{status|}}}]] [[Belongs to computer::{{{computer|}}}]] [[Located in storage room::{{{storeroom|}}}]] [[Serial number::{{{serial|}}}]] [[Specifications::{{{specs|}}}]] ### HDD {{{serial}}} - 状态:{{{status}}} {{#if: {{{computer|}}} | - 所属计算机:[[{{{computer}}}]] | - 所在存储室:[[{{{storeroom}}}]] }} - 规格:{{{specs}}}
然后在汇总页面直接调用模板添加HDD条目:
{{HDD Entry | status = 在用 | computer = 研发部-计算机002 | serial = SN345678 | specs = 512GB SSD SATA 3.0 }}
这种方式的好处是,页面内容既直观可读,又能被Semantic Wiki索引到所有属性,查询起来和Subobject一样方便。
三、额外的查询与概览页面实现
最后,你可以创建一个「HDD资产概览」页面,用#ask查询做各种汇总:
- 所有在用HDD:
{{#ask: [[Has status::在用]] | ?Serial number | ?Belongs to computer | ?Specifications | format=table | headers=none }} - 某存储室的闲置HDD:
{{#ask: [[Has status::闲置]] [[Located in storage room::一楼存储室A]] | ?Serial number | ?Specifications | format=list }}
这样一套下来,就能满足你搭建类数据库系统+概览页面的需求啦~
内容的提问来源于stack exchange,提问作者Black S.
相关产品推荐
相关产品推荐

