Nano Hash - криптовалюты, майнинг, программирование

Jena альтернатива ModelBuilder в RDF4J

Есть ли в Apache Jena интерфейс, например ModelBuilder в RDF4J?

Я вижу ModelMaker в Йене, но я полагаю, что это не что-то похожее на строителя. Ниже приведена функция, использующая rdf4j, которую необходимо реализовать в Jena:

public static org.eclipse.rdf4j.model.Model convertGraph2RDFModel(Graph graph, String label) {
        ModelBuilder builder = new ModelBuilder();
        GraphTraversalSource t = graph.traversal();
        GraphTraversal<Vertex, Vertex> hasLabel = t.V().hasLabel(label);
        Vertex s;
        if(hasLabel.hasNext()){
            s = hasLabel.next();
            extractModelFromVertex(builder, s);
        }
        return builder.build();
    }

private static void extractModelFromVertex(ModelBuilder builder, Vertex s) {
        builder.subject(s.label());
        Iterator<VertexProperty<String>> propertyIter = s.properties();
        while (propertyIter.hasNext()){
            VertexProperty<String> property = propertyIter.next();
            builder.add(property.label(), property.value());
        }
        Iterator<Edge> edgeIter = s.edges(Direction.OUT);
        Edge edge;
        Stack<Vertex> vStack = new Stack<Vertex>();
        while(edgeIter.hasNext()){
            edge = edgeIter.next();
            s = edge.inVertex();
            builder.add(edge.label(), s.label());
            vStack.push(s);
        }
        Iterator<Vertex> vIterator = vStack.iterator();
        while(vIterator.hasNext()){
            s = vIterator.next();
            extractModelFromVertex(builder,s);
        }
    }
20.02.2018

  • Я не знаком с RDF4J, но этот код, похоже, преобразует один объект домена RDF4J в другой. Очевидно, что в Jena нет таких же объектов домена, поэтому нет необходимости конвертировать их между собой. Как вы думаете, почему этот код должен быть реализован в Йене? 22.02.2018
  • @ jaco0646 Graph, Edge и Vertex в приведенном выше примере кода не являются объектами RDF4J. Я бы предположил, что они являются частью некоторого пакета моделирования графов/базы данных графов, и приведенный выше код предназначен для преобразования общей модели графа в модель RDF. Что касается того, почему он хочет заменить RDF4J на Jena, мне самому любопытно. 23.02.2018

Ответы:


1

Я не знаю, есть ли у Jena аналогичная функциональность, но вы, конечно, можете просто продолжать использовать RDF4J ModelBuilder, сериализовать его выходную модель, скажем, в строку (или файл) Turtle или TriG, а затем использовать Jena, чтобы прочитать ее снова.

 org.eclipse.rdf4j.model.Model m = ...; // RDF4J Model built by the ModelBuilder
 java.io.Writer writer = new StringWriter();
 org.eclipse.rdf4j.rio.Rio.write(m, writer, RDFFormat.TRIG); 

 String = writer.toString();

 // Use Jena's parser to read the string back in.

Или, в качестве альтернативы, просто переберите модель RDF4J и преобразуйте каждый оператор напрямую (без сериализации и десериализации между ними):

 org.eclipse.rdf4j.model.Model rdf4jModel = ...; // RDF4J Model built by the ModelBuilder
 org.apache.jena.rdf.model.Model jenaModel = ...; // (empty) Jena model to receive converted rdf4j model 
 rdf4jModel.forEach(stmt -> jenaModel.add(convert(stmt)));

 ...

 public org.apache.jena.rdf.model.Statement convert(
                org.eclipse.rdf4j.model.Statement stmt) {
      ... // create a Jena statement from the RDF4J one. 
 }

Я признаю, что, вероятно, проще использовать единую структуру в большинстве приложений, но нет фундаментальной причины, по которой вы не можете использовать части RDF4J и Jena в сочетании.

21.02.2018
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..