2016-07-15 2 views
0


Недавно я разработал «классические» 3-уровневые веб-приложения с использованием Java EE.
Я использовал GlassFish в качестве сервера приложений, MS SQL Server в качестве СУБД и xhtml-страниц с компонентами frontfaces для интерфейса.Разработка веб-приложения на базе базы трипестор

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

Я много искал в Google и на этом сайте, но я не нашел то, что искал, потому что каждый найденный мной ответ был более теоретическим, чем практическим.
Если возможно, мне нужен учебник или некоторые практические советы. Я прочитал документацию об Apache Jena, но я не могу найти простую отправную точку.
В частности:
- Для использования MS SQL Server с GlassFish я использовал драйвер JDBC, создал источник данных и пул соединений. Существует ли эквивалентная процедура для создания базы данных с тройным хранилищем?
- Чтобы обрабатывать аутентификацию пользователей, я использовал Realm. Что мне теперь делать?

На данный момент я создал «вручную» схему RDF и используя Jena Schemagen. Я перевел ее в Java-класс. Что мне теперь делать?

+1

Добро пожаловать в stackoverflow. Пожалуйста, найдите минутку, чтобы продолжить [тур], чтобы узнать, какие вопросы вы можете задать и не можете спросить здесь.Ваш вопрос не зависит от темы, потому что он запрашивает ресурсы за пределами сайта и удаляет его слишком широко. – Gimby

+0

Я читал приветственное руководство, и я думаю, что мой вопрос не основан на мнениях и связан с реальной проблемой и для которой на этом сайте не существует решения. – ronnie

+0

@ Gimby вежлив. Покажите, что вы сделали; показать, чего не хватает; показать, что вы пытались сделать, чтобы это не сработало; задайте конкретный вопрос о том, как заставить пропавший бит работать. –

ответ

1

После нескольких попыток и других исследований в сети я, наконец, достиг своей цели.
Я решил разработать гибридное решение, в котором я управляю входами пользователей и их разрешениями навигации через MS SQL Server и JDBCRealm, в то время как я использую Jena TDB, чтобы сохранить все остальные данные.

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

<rdf:RDF 
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" 
    xmlns="http://www.stackoverflow.com/example#" 
    xml:base="http://www.stackoverflow.com/example"> 


    <rdfs:Class rdf:ID="User"></rdfs:Class> 

    <rdfs:Class rdf:ID="Project"></rdfs:Class> 

    <rdf:Property rdf:ID="email"></rdf:Property> 

    <rdf:Property rdf:ID="name"></rdf:Property> 

    <rdf:Property rdf:ID="surname"></rdf:Property> 

    <rdf:Property rdf:ID="description"></rdf:Property> 

    <rdf:Property rdf:ID="customer"></rdf:Property> 

    <rdf:Property rdf:ID="insertProject"> 
     <rdfs:domain rdf:resource="http://www.stackoverflow.com/example#User"/> 
     <rdfs:range rdf:resource="http://www.stackoverflow.com/example#Project"/> 
    </rdf:Property> 

</rdf:RDF> 

И это класс Java:

public class MY_ONTOLOGY { 

    private static final OntModel M = ModelFactory.createOntologyModel(OntModelSpec.RDFS_MEM); 

    private static final String NS = "http://www.stackoverflow.com/example#"; 

    private static final String BASE_URI = "http://www.stackoverflow.com/example/"; 

    public static final OntClass USER = M.createClass(NS + "User"); 

    public static final OntClass PROJECT = M.createClass(NS + "Project"); 

    public static final OntProperty EMAIL = M.createOntProperty(NS + "hasEmail"); 

    public static final OntProperty NAME = M.createOntProperty(NS + "hasName"); 

    public static final OntProperty SURNAME = M.createOntProperty(NS + "hasSurname"); 

    public static final OntProperty DESCRIPTION = M.createOntProperty(NS + "hasDescription"); 

    public static final OntProperty CUSTOMER = M.createOntProperty(NS + "hasCustomer"); 

    public static final OntProperty INSERTS_PROJECT = M.createOntProperty(NS + "insertsProject"); 

    public static final String getBaseURI() { 
     return BASE_URI; 
    } 

} 

Затем я создал папку на моем компьютере, где я хочу, чтобы хранить данные, как C:\MyTDBdataset.
Для хранения данных в нем, я использую следующий код:

String directory = "C:\\MyTDBdataset"; 
Dataset dataset = TDBFactory.createDataset(directory); 


dataset.begin(ReadWrite.WRITE); 
try { 
    Model m = dataset.getDefaultModel(); 
    Resource user = m.createResource(MY_ONTOLOGY.getBaseURI() + "Ronnie", MY_ONTOLOGY.USER); 
    user.addProperty(MY_ONTOLOGY.NAME, "Ronald"); 
    user.addProperty(MY_ONTOLOGY.SURNNAME, "Red"); 
    user.addProperty(MY_ONTOLOGY.EMAIL, "[email protected]"); 

    Resource project = m.createResource(MY_ONTOLOGY.getBaseURI() + "MyProject", MY_ONTOLOGY.PROJECT); 
    project.addProperty(MY_ONTOLOGY.DESCRIPTION, "This project is fantastic"); 
    project.addProperty(MY_ONTOLOGY.CUSTOMER, "Customer & Co"); 

    m.add(user, MY_ONTOLOGY.INSERTS_PROJECT, project); 
    dataset.commit(); 
} finally { 
    dataset.end(); 
} 

Если я хочу прочитать заявления в моем БРТ, я могу использовать что-то вроде этого:

dataset.begin(ReadWrite.READ); 

try { 
    Model m = dataset.getDefaultModel(); 
    StmtIterator iter = m.listStatements(); 


    while (iter.hasNext()) { 
     Statement stmt = iter.nextStatement(); 
     Resource subject = stmt.getSubject(); 
     Property predicate = stmt.getPredicate(); 
     RDFNode object = stmt.getObject(); 


     System.out.println(subject); 
     System.out.println("\t" + predicate); 
     System.out.println("\t\t" + object); 
     System.out.println(""); 
    } 
    m.write(System.out, "RDF/XML"); //IF YOU WANT TO SEE AT CONSOLE YOUR DATA AS RDF/XML 
} finally { 
    dataset.end(); 
} 

Если вы хотите перемещаться по своей модели по-разному, посмотрите на это tutorial от Apache.
Если вы хотите, чтобы удалить определенные заявления в вашей модели, вы можете написать что-то вроде этого:

dataset.begin(ReadWrite.WRITE); 
try { 
    Model m = dataset.getDefaultModel(); 
    m.remove(m.createResource("http://http://www.stackoverflow.com/example/Ronnie"), MY_ONTOLOGY.NAME, m.createLiteral("Ronald")); 
    dataset.commit(); 
} finally { 
    dataset.end(); 
} 

Это все! До свидания!

Смежные вопросы