将任何 URI 类型的 CURI 字符串表示形式转换为真正的 CURI 或 IRI

问题描述 投票:0回答:1

我有这样的三元组,其中对象是 CURIe 的

anyURI
类型的字符串表示形式。我想用对象作为真正的 CURIe 或 IRI 来构造三元组。

@prefix source: <https://example.org/source> .
@prefix external: <https://example.org/external> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

source:sample1 source:external_identifiers "external:0110680"^^xsd:anyURI .
  • IRI(?o)
    不返回任何内容。
  • IRI(str(?o))
    返回
    <external:0110680>
    • 但是我想要
      <https://example.org/external/0110680>
  • 这个问题提到了
    tarql:expandPrefixedName
    ,但是当我尝试这样做时(使用前缀或直接使用
    expandPrefixedName
    ),我在
    arq
    或GraphDB中收到以下错误消息。我认为这是因为这些工具中不提供
    tarql
    功能?

格式错误的查询:第 12 行第 28 列出现词法错误。遇到:'40' (40),在前缀“expandPrefixedName”之后

我更喜欢在 SPARQL 中执行此操作,但也会尝试使用 rdflib 之类的 Python 解决方案。

sparql rdf graphdb rdflib arq
1个回答
0
投票

要将其转换为 IRI,您可以使用:

BIND( IRI(REPLACE(STR(?o), "external:", STR(external:))) AS ?o_iri ) .
  • REPLACE()
    "external:"
    中的字符串
    STR(?o)
    (即前缀标签)替换为
    STR(external:)
  • STR(?o)
    ?o
    (
    "external:0110680"^^xsd:anyURI
    ) 转换为字符串 (
    "external:0110680"
    )
  • STR(external:)
    采用前缀 IRI (
    <https://example.org/external>
    ) 并将其转换为字符串 (
    "https://example.org/external"
    )
  • IRI()
    将替换的字符串转换为 IRI
© www.soinside.com 2019 - 2024. All rights reserved.