DotNetRDF:如何强制 CompressingTurtleWriter 使用 QNames 而不是完整的 IRI

DotNetRDF: how to force CompressingTurtleWriter to use QNames instead of full IRI

我正在使用 DotNetRDF Framework (v2.6) 将数据库内容导出到 turtle 文件中。我使用以下命令将所有 QName 添加到图中:

exportGraph.NamespaceMap.AddNamespace("medi", new Uri("http://sphn.ch/rdf/ontology/Swissmedic/"));
exportGraph.NamespaceMap.AddNamespace("sphn_gtin", new Uri("http://sphn.ch/rdf/ontology/GTIN/"));
exportGraph.NamespaceMap.AddNamespace("sphn_atc", new Uri("http://sphn.ch/rdf/ontology/ATC/")); 

然后我使用以下方法将 exportGraph 写入 turtle 文件:

CompressingTurtleWriter turtlewriter = new CompressingTurtleWriter();
turtlewriter.Save(exportGraph, CreateFileName());

我希望所有输出的格式如下:

medi:11275028 medi:ATC sphn_atc:A01AD11;
              medi:DateIntroduced "1982-03-15T00:00:00"^^xsd:dateTime;
              medi:GTIN sphn_gtin:7680112750289;
              medi:Label "Malveol, émuls, 100 ml"@fr,
                         "Malveol, Emuls, 100 ml"@de;
              medi:PrescriptionCategory "D"^^xsd:string;
              medi:Producer "Laboratoires Magistra SA"^^xsd:string;
              medi:SwissmedicNumber "11275028"^^xsd:string;
              medi:TherapyGroup "12.03.20."^^xsd:string;
              a medi:Swissmedic.

但是结果是这样的:

<http://sphn.ch/rdf/ontology/Swissmedic/11275028> medi:ATC sphn_atc:A01AD11; 
                                                  medi:DateIntroduced "1982-03-15T00:00:00"^^xsd:dateTime;
                                                  medi:GTIN <http://sphn.ch/rdf/ontology/GTIN/7680112750289>;
                                                  medi:Label "Malveol, émuls, 100 ml"@fr,
                                                             "Malveol, Emuls, 100 ml"@de;
                                                  medi:PrescriptionCategory "D"^^xsd:string;
                                                  medi:Producer "Laboratoires Magistra SA"^^xsd:string;
                                                  medi:SwissmedicNumber "11275028"^^xsd:string;
                                                  medi:TherapyGroup "12.03.20."^^xsd:string;
                                                  a medi:Swissmedic.

我希望使用 QName 和 GTIN 对象编写主题。在其他导出中,我发现使用前缀或完整 IRI 时它更加随机。

到目前为止,我正在研究在创建 CompressingTurtleWriter() 时可以设置哪些选项,但只有 CompressenLevel 和 TurtleSyntax 是原始的或 W3C 都不会改变输出中的任何内容。 另外,如果我设置 turtlewriter.PrettyMode = true 它不会改变输出中的任何内容。 最后有一个 TurtleFormatter,但我找不到如何将它与 CompressingTurtleWriter() 结合使用的方法。

有没有人遇到过类似的问题,我该如何更改? 谢谢凯蒂

最初的 Turtle 规范不允许数字作为紧凑 IRI 本地部分(: 之后的部分)的第一个字符,但规范的 W3C 版本允许这样做。因此,将语法模式设置为 TurtleSyntax.W3C 应该会产生您期望的输出。

不过有一个例外。如果您的图表中唯一主题节点与三元组的比率很高(如果(# unique subjects)/(#triples)> 0.75),那么编写器将进入“高速模式”,这将禁用所有压缩。可以通过将编写器上的 HighSpeedModePermitted 属性 设置为 false.

来禁用此行为