首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rdfLib将单个反斜杠转换为多个反斜杠

rdfLib将单个反斜杠转换为多个反斜杠
EN

Stack Overflow用户
提问于 2021-11-11 15:00:45
回答 1查看 28关注 0票数 0

我使用rdfLib以trig格式(基于海龟)序列化我的三元组,但由于某种原因,我的sh:pattern语句(regex格式)中的反斜杠()是加倍的。我试着输入sh:pattern的值作为原始字符串,并转义反斜杠,但是它仍然在生成的trig文件中创建了太多的反斜杠。

示例:

代码语言:javascript
复制
"shpattern": r"^\s|\d{VALUE}\D"

一旦序列化成为:

sh:pattern "^\\s|\\d{4}\\D"

在输入和最终的序列化之间有几个转换步骤,但是这些转换都没有触及原始输入中的反斜杠,所以这使我不得不责怪序列化。

有谁知道为什么rdfLib会这么做,以及是否有办法关闭它?我可以想象rdfLib可能会看到一些字符串,并决定如果有反斜杠,我可能想要转义它们(通常是我想要的),但是由于输出实际上是用于反斜杠有正则表达式函数的shacl形状的输入,所以我不想转义它们!

谢谢你的提示!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-17 06:49:38

试图使用RDFlib中断解析此RDF:

代码语言:javascript
复制
ttl = """
    PREFIX sh: <http://www.w3.org/ns/shacl#>

    <a:> sh:pattern "^\s|\d{VALUE}\D" .
    """

但这样做是可行的:

代码语言:javascript
复制
g = Graph()
g.add((
    URIRef("a:"),
    URIRef("http://www.w3.org/ns/shacl#pattern"),
    Literal("^\s|\d{VALUE}\D")
))
g2 = Graph().parse(data=g.serialize())
print(g2.serialize())

因此,答案是Turtle解析器确实无法处理RDF文字中的未转义反斜杠,RDFlib将对这些反斜杠进行编码,但不会再次对它们重新编码。因此,在将RDF从RDF中提取到工具中时,您只需要像这样对正则表达式进行反编码。

我确信pySHACL可以很好地处理所有形式的输入。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69930478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档