【问题标题】:Semantic Mediawiki and properties in templateSemantic Mediawiki 和模板中的属性
【发布时间】:2021-03-05 07:52:26
【问题描述】:

我在模板中有如下构造来检查属性是否完整

{{#if:{{{typeip|}}}|'''Type IP:'''{{{typeip}}}|<big>'''Type IP:'''</big><span style="color: red">not filled in</span>}}

我希望 typyap 属性成为一个属性,以便我可以通过语义搜索或通过 #ask 函数使用查询来找到它。

我尝试了以下构造

{{#if:[[typeip::{{{typeip|}}}]]|'''Type IP:'''{{{typeip}}}|<big>'''Type IP:'''</big><span style="color: red">not filled in</span>}}

但它不起作用。 #asc 函数返回一个空请求,类型 ip 属性页为空。你能告诉我我做错了什么吗?我使用服务脚本rebuildData.php 执行了重新索引,但这也无济于事。我试图在模板中的其他各个位置插入该属性,但它也不起作用。模板使用表格填写。

提前谢谢你!

【问题讨论】:

    标签: mediawiki semantics mediawiki-templates semantic-mediawiki


    【解决方案1】:

    当然,它不起作用。您错误地调用了{{#if:}} 解析器函数。

    它的参数是:

    1. 条件,
    2. 如果第一个参数的计算结果不是空字符串或空格,则返回的值,
    3. 第一个参数为空时返回的值。

    因此语义标注应该在第二个参数中,而不是第一个参数中:

    {{#if:{{{typeip|}}}
    | '''Type IP:''' [[typeip::{{{typeip}}}]]
    | <big>'''Type IP:'''</big><span style="color: red">not filled in</span>
    }}
    

    {{{typeip}}} 应该是没有任何 wiki 格式的纯文本。如果您必须将wikitext传递给它以将wikilinks转换为Page类型的语义注释设置属性,最简单的方法如下:

    • 安装Scribunto,
    • 创建Module:Inject,内容如下:
    return {
        property = function (frame)
            local wikitext, property = frame.args[1], frame.args[2]
            local annotation = mw.ustring.gsub (
                wikitext,
                '%[%[([^|%]]+)(|[^%]]*)?%]%]',
                '[[' .. property .. '::%1%2]]'
            )
            return annotation
        end
    }
    
    • 在您的模板中添加以下内容:
    {{#invoke:Inject|property|{{{typeip|}}}|typeip}}
    

    该模板会将{{{typeip}}} 中的任何维基链接(如[[A]][[B|C]])转换为语义注释(如[[typeip::A]][[typeip::B|C]])。

    【讨论】:

    • 感谢您的回答!有效!但仅适用于数据类型为文本、日期或数字的字段。由于某种原因,它不适用于链接到其他页面的字段。例如,我有一个值字段,其中一个表单是从不同类别的页面列表中选择的。它不适用于这个领域。此外,如果我向其中添加属性,该字段在模板中显示不正确。在这种情况下不知道该怎么办?
    • 你的意思是,如果模板参数是像[[Page]] 这样的wikilink,那么注释不起作用?如果是这样,它不应该。要么将裸露的Page 传递给模板,要么使用正则表达式处理参数——您将需要启用正则表达式的 MediaWiki 扩展或 Lua。
    • 是的!那就是我的意思。我有一个扩展 ParserFunctions。够了吗?只有我真的不知道在这种情况下如何通过正则表达式设置属性。可以举个例子吗?
    • 哇!非常感谢!我会处理这一切!没有你我不可能做到!
    猜你喜欢
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多