<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://qingliezhiquan.com/mediawiki/index.php?action=history&amp;feed=atom&amp;title=%E5%9C%A8_Semantic_Mediawiki_%E4%B8%AD%E5%B8%A6%E6%9C%89_subobject_%E7%9A%84%E6%A8%A1%E6%9D%BF%E5%A6%82%E4%BD%95%E5%88%9B%E5%BB%BA</id>
	<title>在 Semantic Mediawiki 中带有 subobject 的模板如何创建 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://qingliezhiquan.com/mediawiki/index.php?action=history&amp;feed=atom&amp;title=%E5%9C%A8_Semantic_Mediawiki_%E4%B8%AD%E5%B8%A6%E6%9C%89_subobject_%E7%9A%84%E6%A8%A1%E6%9D%BF%E5%A6%82%E4%BD%95%E5%88%9B%E5%BB%BA"/>
	<link rel="alternate" type="text/html" href="https://qingliezhiquan.com/mediawiki/index.php?title=%E5%9C%A8_Semantic_Mediawiki_%E4%B8%AD%E5%B8%A6%E6%9C%89_subobject_%E7%9A%84%E6%A8%A1%E6%9D%BF%E5%A6%82%E4%BD%95%E5%88%9B%E5%BB%BA&amp;action=history"/>
	<updated>2026-08-11T09:20:53Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://qingliezhiquan.com/mediawiki/index.php?title=%E5%9C%A8_Semantic_Mediawiki_%E4%B8%AD%E5%B8%A6%E6%9C%89_subobject_%E7%9A%84%E6%A8%A1%E6%9D%BF%E5%A6%82%E4%BD%95%E5%88%9B%E5%BB%BA&amp;diff=7933&amp;oldid=prev</id>
		<title>Mwroot: Created page with &quot;在 Semantic MediaWiki 使用过程中，难免需要在同一页面，使用相同的模板。相同模板使用多次时，会导致一个参数有多个取值，最终在用 #ask 查询时，出现笛卡尔积。笛卡尔积的定义：假设集合A={a, b}，集合B={0, 1, 2}，则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。笛卡尔积的排序是乱的，我们必须用 subobject，令每一个参数及其取值，都变得唯一...&quot;</title>
		<link rel="alternate" type="text/html" href="https://qingliezhiquan.com/mediawiki/index.php?title=%E5%9C%A8_Semantic_Mediawiki_%E4%B8%AD%E5%B8%A6%E6%9C%89_subobject_%E7%9A%84%E6%A8%A1%E6%9D%BF%E5%A6%82%E4%BD%95%E5%88%9B%E5%BB%BA&amp;diff=7933&amp;oldid=prev"/>
		<updated>2025-09-29T02:16:46Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;在 Semantic MediaWiki 使用过程中，难免需要在同一页面，使用相同的模板。相同模板使用多次时，会导致一个参数有多个取值，最终在用 #ask 查询时，出现笛卡尔积。笛卡尔积的定义：假设集合A={a, b}，集合B={0, 1, 2}，则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。笛卡尔积的排序是乱的，我们必须用 subobject，令每一个参数及其取值，都变得唯一...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;在 Semantic MediaWiki 使用过程中，难免需要在同一页面，使用相同的模板。相同模板使用多次时，会导致一个参数有多个取值，最终在用 #ask 查询时，出现笛卡尔积。笛卡尔积的定义：假设集合A={a, b}，集合B={0, 1, 2}，则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。笛卡尔积的排序是乱的，我们必须用 subobject，令每一个参数及其取值，都变得唯一。subobject 的用法如下：&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{#subobject:mysubobject&lt;br /&gt;
 |Has property 1=value1&lt;br /&gt;
 |Has property 1=value2&lt;br /&gt;
 |Has property 2=value1&lt;br /&gt;
 ...&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 自动模板 ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mediawiki&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{#template_params:&lt;br /&gt;
案件名称 (property=案件名称)|&lt;br /&gt;
阶段案号 (property=阶段案号)|&lt;br /&gt;
审判时间 (property=审判时间)}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;includeonly&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! 案件名称&lt;br /&gt;
| [[案件名称::{{{案件名称|}}}]]&lt;br /&gt;
|-&lt;br /&gt;
! 阶段案号&lt;br /&gt;
| [[阶段案号::{{{阶段案号|}}}]]&lt;br /&gt;
|-&lt;br /&gt;
! 审判时间&lt;br /&gt;
| [[审判时间::{{#time:Y-m-d|{{{审判时间|}}}}}]]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== subobject 模板 ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mediawiki&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{#template_params:&lt;br /&gt;
  案件名称 (property=案件名称)|&lt;br /&gt;
  阶段案号 (property=阶段案号)|&lt;br /&gt;
  审判时间 (property=审判时间)}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&amp;lt;!-- 先把这一组数据存成一个子对象，子对象名用“页面名/阶段案号”确保唯一 --&amp;gt;&lt;br /&gt;
{{#subobject:{{PAGENAME}}/{{{阶段案号}}}&lt;br /&gt;
 |案件名称= {{{案件名称}}}&lt;br /&gt;
 |阶段案号= {{{阶段案号}}}&lt;br /&gt;
 |审判时间= {{#time:Y-m-d|{{{审判时间}}}}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 然后再渲染成表格 --&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 案件名称&lt;br /&gt;
| {{{案件名称}}}&lt;br /&gt;
|-&lt;br /&gt;
! 阶段案号&lt;br /&gt;
| {{{阶段案号}}}&lt;br /&gt;
|-&lt;br /&gt;
! 审判时间&lt;br /&gt;
|{{{审判时间}}}&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 核心区别 ==&lt;br /&gt;
=== 自动模板 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
! 某字段&lt;br /&gt;
| [[某字段::{{{某字段|}}}]]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 存值：&amp;lt;nowiki&amp;gt;[[某字段::…]]&amp;lt;/nowiki&amp;gt; 把参数当全局属性写到当前页面。&lt;br /&gt;
* 展示：同一个 `{{{某字段}}}` 插槽也直接在表格里渲染。&lt;br /&gt;
* 结果：多次调用就把多组属性值都累积到同一个页面上，查询时它们会两两配对（笛卡尔积）。&lt;br /&gt;
&lt;br /&gt;
=== subobject 模板 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{#subobject:{{PAGENAME}}/{{{某字段}}}&lt;br /&gt;
 |某字段= {{{某字段}}}&lt;br /&gt;
 |…其它字段…&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{| …表格开始…&lt;br /&gt;
! 某字段&lt;br /&gt;
| {{{某字段}}}&lt;br /&gt;
|…其余展示…&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 分对象存值：`#subobject` 用“页面名/某字段”做唯一 ID，每次调用创建独立记录，将 `某字段`（以及其它字段）写入这个子对象。&lt;br /&gt;
* 单独展示：表格里只是把模板参数 `{{{某字段}}}`（或经 `#time` 格式化后的值）渲染出来，不再重复写入属性。&lt;br /&gt;
* 结果：每条记录独立存储，查询时 `#ask` 不会再把不同记录里的属性混配，输出就能保持一一对应。&lt;br /&gt;
&lt;br /&gt;
== 总结 ==&lt;br /&gt;
这样，通过 subobject，就解决了一个页面复用模板时，同一参数多个值导致排序混乱的问题。&lt;/div&gt;</summary>
		<author><name>Mwroot</name></author>
	</entry>
</feed>