我使用rdfLib以trig格式(基于海龟)序列化我的三元组,但由于某种原因,我的sh:pattern语句(regex格式)中的反斜杠()是加倍的。我试着输入sh:pattern的值作为原始字符串,并转义反斜杠,但是它仍然在生成的trig文件中创建了太多的反斜杠。
示例:
"shpattern": r"^\s|\d{VALUE}\D"一旦序列化成为:
sh:pattern "^\\s|\\d{4}\\D"
在输入和最终的序列化之间有几个转换步骤,但是这些转换都没有触及原始输入中的反斜杠,所以这使我不得不责怪序列化。
有谁知道为什么rdfLib会这么做,以及是否有办法关闭它?我可以想象rdfLib可能会看到一些字符串,并决定如果有反斜杠,我可能想要转义它们(通常是我想要的),但是由于输出实际上是用于反斜杠有正则表达式函数的shacl形状的输入,所以我不想转义它们!
谢谢你的提示!
发布于 2021-12-17 06:49:38
试图使用RDFlib中断解析此RDF:
ttl = """
PREFIX sh: <http://www.w3.org/ns/shacl#>
<a:> sh:pattern "^\s|\d{VALUE}\D" .
"""但这样做是可行的:
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可以很好地处理所有形式的输入。
https://stackoverflow.com/questions/69930478
复制相似问题