Записать файл rdf без алфавитного обозначения

#rdf #jena #rdfs

#rdf #jena #rdfs

Вопрос:

Записать 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);, тройки располагаются в алфавитном порядке (процессор, СТОИМОСТЬ, ESB …). Когда я создам модель, расположите свойства в нужном мне порядке и работайте. Но когда я пишу модель, она располагается в алфавитном порядке. Как я могу пренебречь алфавитным порядком для записи модели RDF? Еще один вопрос, этот rdf-файл правильный?

Спасибо.

Ответ №1:

RDF не является законным

Отсутствует . в конце

Ваш файл RDF в вопросе неправильно сформирован. Форма, подобная

 s p1 o1 ;
  p2 o2 ;
  p3 o3 .
  

Должно заканчиваться точкой. Похоже, вы показываете нам только первые несколько строк вашего файла.

Определение собственных терминов в пространствах имен RDF и RDFS

Технически это может и не быть запрещено, но в некоторых сериализациях термины в пространстве имен RDF, которые на самом деле не являются словарем RDF, будут вызывать предупреждения, поэтому такие термины, как rdf:Standard_M1__Small_default и rdfs:Platform , вероятно, являются плохой идеей. Например, см.

5.1 Пространство имен RDF и словарь

Словарь RDF идентифицируется этим именем пространства имен и состоит только из следующих имен: … Любые другие имена не определены и при обнаружении ДОЛЖНЫ выдавать предупреждение, но в остальном должны вести себя нормально.

Порядок не имеет значения

RDF — это представление данных на основе графика. График RDF — это набор троек, а наборы не имеют порядка. Один и тот же RDF-график может быть сериализован множеством различных способов. Turtle более удобочитаем и доступен для записи, чем некоторые форматы, но это всего лишь представление неупорядоченного формата данных. Поскольку это неупорядоченное представление данных, у реализации нет реальной причины запоминать порядок, в котором вы добавляли элементы. Таким образом, вероятно, нет простого способа поддерживать какой-либо определенный порядок сериализации.

Комментарии:

1. Спасибо за вашу помощь! Но для меня важен порядок, потому что, когда я читаю файл, мне нужно, чтобы свойства были в том порядке, в котором они были добавлены.

2. Непонятно, зачем вам это «нужно». Порядок следования троек в файле не изменяет график. Когда Jena считывает тройки, они помещаются в график, и порядок, в котором они появились в файле, не сохраняется. Поскольку порядок не имеет значения, маловероятно, что какой-либо стандартный инструмент облегчит внезапное сохранение порядка. Почему это важно в вашем случае?

3. @GabrielaCavalcante Также не стоит определять свой собственный словарь в пространствах имен rdf: и rdfs:. Смотрите цитату в обновленном ответе.

4. Ну, тогда вы на самом деле не работаете с RDF, потому что вы не обрабатываете его как RDf, а скорее работаете с текстовыми файлами, которые имеют поверхностное сходство с RDF. Если вы хотите обработать его как RDF, тогда прочитайте модель RDF и выполните проверку модели, а не текстового файла.

5. через Google Translate вы написали: «если это неправильно, я изменю свой код, чтобы читать все последовательно. но сначала мне было интересно, возможно ли не заказывать модель.» Модели не упорядочены. сериализация должна помещать некоторый текст перед другим текстом, но это всего лишь артефакт сериализации. Если кто-то говорит «это окно содержит красный шар и синий мяч», а вы пишете тест, который «первый шар я достаю должно быть голубым, а второй должен быть красным», то тест не так, не в поле, потому что вы можете вытащить их в любом порядке.