【问题标题】:Convert from RDF "type qualified literal" to Prolog atom in SWI Prolog在 SWI Prolog 中从 RDF“类型限定文字”转换为 Prolog 原子
【发布时间】:2020-04-11 23:03:42
【问题描述】:

“SWI-Prolog Semantic Web Library 3.0”允许您像这样轻松地断言和查询 RDF 三元组:

- rdf_assert(number, is, 1).
true.

?- rdf(number, is, X).
X = 1^^'http://www.w3.org/2001/XMLSchema#integer'.

如何将 X 从“类型限定文字”格式(描述为 here)转换为标准 Prolog 原子:X = 1?

我找到了xsdp_convert/3,但它需要类型 ('http://www.w3.org/2001/XMLSchema#integer') 和值 (1) 作为单独的参数传入。我如何分解“类型限定文字”(1^^'http://www.w3.org/2001/XMLSchema#integer')来做到这一点?

或者更好:value^^type 格式在 Prolog 中是否真的意味着什么,并允许以更优雅的方式来实现它?

【问题讨论】:

    标签: prolog rdf swi-prolog


    【解决方案1】:

    您可以使用统一,分解您获得的复合词,或访问它的参数:

    ?- use_module(library(semweb/rdf11)).
    true.
    
    ?- rdf_assert(number, is, 1).
    true.
    
    ?- rdf(number, is, N^^URI).
    N = 1,
    URI = 'http://www.w3.org/2001/XMLSchema#integer'.
    
    ?- rdf(number, is, X), X =.. List.
    X = 1^^'http://www.w3.org/2001/XMLSchema#integer',
    List = [^^, 1, 'http://www.w3.org/2001/XMLSchema#integer'].
    
    ?- rdf(number, is, X), arg(1, X, N).
    X = 1^^'http://www.w3.org/2001/XMLSchema#integer',
    N = 1.
    

    【讨论】:

    • 感谢 Paulo 的选择。 CapelliC 的选项是很好的附加数据,但由于您先回答,我将其标记为答案
    【解决方案2】:

    我认为我们可以(应该?)通过提供的接口使用标准前缀,而不是硬编码它们。所以……

    ?- rdf(S,P,O^^xsd:integer).
    S = number,
    P =  (is),
    O = 1.
    
    ?- rdf(S,P,O),rdf_equal(O,N^^xsd:integer).
    S = number,
    P =  (is),
    O = 1^^'http://www.w3.org/2001/XMLSchema#integer',
    N = 1.
    

    SWI-Prolog 力求效率,我们应该使用提供的接口,因为rdf_prefixes 从术语重写基础设施中得到特殊处理,即在编译/加载源文件时处理文字。

    请记住:我们可以定义自己的应用域前缀,以享受与标准定义前缀相同的待遇。

    【讨论】:

    • 不确定我是否理解。您只是说要使用 ^^xsd:integer 而不是像 Paulo 下面那样使用 'w3.org/2001/XMLSchema#integer' 吗?当然,这是有道理的。这并没有为您提供任何特殊的方法来使用有用的内置谓词将 X^^Y 形式的术语转换为 Prolog atom 吗?这就是我要找的。​​span>
    • 关键(我认为)它是 rdf_equal/2。关键是RDF 前缀会受到术语重写 的影响,并且SWI-Prolog 具有与模块耦合的特殊机制以允许“安全”前缀的使用。 rdf_equal(在文档中不容易发现)允许进行重写...
    猜你喜欢
    • 2011-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-11
    • 1970-01-01
    相关资源
    最近更新 更多