我需要一个内联查询,列出特定命名空间中的所有页面,但不会列出这些页面上指定的subobjects。
Restricting results to a namespace可能是这样的:
{{#ask: [[ExampleNamespace:+]] }}
但它也列出了所有子对象。
解决方法:
在这些页面上指定一个类别(子对象不继承它)并改为查询该类别:
{{#ask: [[ExampleCategory]] }}
在这些页面上指定一个属性(从不在子对象上)并查询属性(具有wildcard值):
{{#ask: [[ExampleProperty::+]] }}
但两种解决方法都需要编辑,我想避免。 有更好的解决方法吗?
答案 0 :(得分:1)
不确定它是否是一种更好的方式,但它看起来像数组格式/数组,并且它们的#arraymap
和#arrayunique
函数是一种方法,可以修剪SMW子对象标记并制作DISTINCT操作。不幸的是,下面的解决方案也描述了查询结果限制问题(至少在我所知的SMW中)。一般来说,它可能如下所示,如果有人提出更好的解决方案,我将不胜感激:
<!-- Fetch all pages from the "Live event" namespace -->
{{#arraydefine: QUERY_RESULT
| {{#ask: [[Live event:+]]
| format = array
| link = none <!-- NOTE: array item link -->
| limit = 10000 <!-- NOTE: limit -->
}}
}}
<!-- Store the mapped result into another array -->
{{#arraydefine: MAPPED_QUERY_RESULT
| {{#arraymap: {{#arrayprint: QUERY_RESULT}}
| ,
| $O <!-- NOTE: array map iterator value -->
| {{#explode: $O <!-- NOTE: explode by hash -->
| #
| 0
}}
}}
| ,
| unique
}}
<!-- Generate links markup -->
{{#arraymap: {{#arrayprint: MAPPED_QUERY_RESULT}}
| ,
| $O
| [[$O]] <!-- NOTE: plain links -->
}}
上述代码中的注释:
<span>
标记和class
属性)。{{#arraymap}}
似乎以最简单的方式替换字符串,如sed
或简单的文本编辑器应用程序。所以$O
用作formula
参数的迭代器值占位符,试图不与其他字符串标记冲突。#ask
子对象结果会生成像PageA#_159c1f213de2fcaf165f2c9c5c56686b
这样的散列链接。只是摆脱他们。如果你需要删除wiki链接,你也可以使用[[
或|
(分别编码为[<nowiki/>[
和<nowiki>|</nowiki>
)[[{{#replace: $O | _ | <nowiki> </nowiki>}}]]
对我不起作用 - 由于某些原因,下划线只是被消费了,但是在#replace
功能维基页面上也建议采用这种方法。一些链接: