【问题标题】:Write rdf file without Alphabetical不按字母顺序编写 rdf 文件
【发布时间】:2014-07-03 05:23:59
【问题描述】:

编写RDF

我有一个模型 RDF,我想把它写到一个文件中。结果是这样的:

@prefix dc:      <http://purl.org/dc/elements/1.1/> .
@prefix legal:   <http://www.linked-usdl.org/ns/usdl-legal#> .
@prefix foaf:    <http://xmlns.com/foaf/0.1/> .
@prefix vann:    <http://purl.org/vocab/vann/> .
@prefix org:     <http://www.w3.org/ns/org#> .
@prefix rdfs:    <http://www.w3.org/2000/01/rdf-schema#> .
@prefix price:   <http://www.linked-usdl.org/ns/usdl-price#> .
@prefix usdl:    <http://www.linked-usdl.org/ns/usdl#> .
@prefix xsd:     <http://www.w3.org/2001/XMLSchema#> .
@prefix owl:     <http://www.w3.org/2002/07/owl#> .
@prefix rdf:     <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix dei:     <http://dei.uc.pt/rdf/dei#> .
@prefix gr:      <http://purl.org/goodrelations/v1#> .
@prefix skos:    <http://www.w3.org/2004/02/skos/core#> .

rdf:Standard_M1__Small_default
      rdfs:CPU "1 EC2 Compute Unit (1 virtual core with 1 EC2 Compute Unit)"^^xsd:string ;
      rdfs:RAM "1.7"^^xsd:float ;
      rdfs:Platform "32-bit"^^xsd:string ;
      rdfs:Storage "160"^^xsd:float .
      rdfs:IOPerformance "Moderate"^^xsd:string ;
      rdfs:EBS-OptimizedAvailable
              "false"^^xsd:boolean ;
      rdfs:OS "Linux/UNIX"^^xsd:string ;
      rdfs:Cost "0.08"^^xsd:float ;

但是,当执行 model.write(out, lang); 时,三元组按字母顺序排列(CPU、COST、ESB...)。当我创建模型时,按我想要的顺序放置属性并工作。但是当我编写模型时,它是按字母顺序排列的。如何忽略字母顺序来编写 RDF 模型?还有一个问题,这个rdf文件对吗?

谢谢。

【问题讨论】:

    标签: rdf jena rdfs


    【解决方案1】:

    RDF 不合法

    结尾处缺少.

    您在问题中的 RDF 文件格式不正确。像

    这样的形式
    s p1 o1 ;
      p2 o2 ;
      p3 o3 .
    

    应该以句号结尾。看起来您可能只向我们展示了文件的前几行。

    在 RDF 和 RDFS 命名空间中定义您自己的术语

    这在技术上可能不被禁止,但在某些序列化中,RDF 命名空间中实际上不是 RDF 词汇的术语会导致警告,因此像 rdf:Standard_M1__Small_defaultrdfs:Platform 这样的术语可能不是一个好主意。例如,见

    5.1 The RDF Namespace and Vocabulary

    RDF 词汇表由该命名空间名称标识,并由 仅以下名称中的一个:……未定义任何其他名称,并且 遇到时应生成警告,否则应生成警告 表现正常。

    顺序无所谓

    RDF 是一个基于 graph 的数据表示。 RDF 图是三元组的集合,集合没有顺序。同一个 RDF 图可以用许多不同的方式进行序列化。 Turtle 比某些格式更具人类可读性和可写性,但它只是一种 无序 数据格式的表示。因为它是一种无序的数据表示,所以没有真正的理由让实现记住您添加内容的顺序。因此,可能没有简单的方法来维护序列化的任何特定顺序。

    【讨论】:

    • 感谢您的帮助!但对我来说,顺序很重要,因为当我读取文件时,我需要属性按添加顺序排列。
    • 不清楚你为什么“需要”那个。文件中三元组的顺序不会改变图表。当 Jena 读取三元组时,它们会被放入一个图表中,并且它们在文件中出现的顺序不会被保留。由于顺序无关紧要,因此任何标准工具都不太可能使突然保持顺序变得容易。为什么它对您来说很重要?
    • @GabrielaCavalcante 在 rdf: 和 rdfs: 命名空间中定义自己的词汇表也是一个坏主意。请参阅更新答案中的引用。
    • 好吧,那么您实际上并没有使用 RDF,因为您没有将其视为 RDf,而是使用与 RDF 表面相似的文本文件。如果您想将其视为 RDF,则读取 RDF 模型并对模型进行验证,而不是文本文件。
    • 通过谷歌翻译,您写道,“如果这是错误的,我将修改我的代码以按顺序读取所有内容。但首先,我想知道是否可以不订购模型。”模型没有排序。序列化必须将一些文本放在其他文本之前,但这只是序列化的产物。如果有人说“这个盒子里有一个红球和一个蓝球”,而你写了一个测试“我取出的第一个球应该是蓝色的,第二个应该是红色的”,那么 test 是错了,不是盒子,因为你可以按任意顺序把它们拉出来。
    猜你喜欢
    • 1970-01-01
    • 2012-02-17
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多