2016-07-15 94 views
0


我最近開發了一個使用Java EE的「經典」三層web應用程序。
我已經使用GlassFish作爲應用程序服務器,MS SQL Server作爲DBMS和xhtml頁面與前端的primefaces組件。開發基於三重數據庫的Web應用程序

現在,出於教育目的,我想用一個純粹的triplestore數據庫替換關係數據庫,但我不確定要遵循的過程。

我在谷歌和本網站上搜索了很多,但我沒有找到我正在尋找的東西,因爲我發現的每個答案都比實際更理論化。
如果可能,我需要一些教程或一些實用技巧。 我已閱讀關於Apache Jena的文檔,但我無法找到一個堅實的起點。爲了在GlassFish中使用MS SQL Server我使用了JDBC Driver,創建了一個數據源和一個連接池。它是否存在一個設置三重商店數據庫的等效過程?
- 爲了處理用戶身份驗證,我使用了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, "ronni[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(); 
} 

如果我想讀我的TDB的語句,我可以使用這樣的事情:

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(); 
} 

如果您想要以不同的方式瀏覽您的模型,請參閱Apache提供的tutorial
如果要刪除模型中的特定聲明,你可以寫這樣的事情:

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(); 
} 

這一切!再見!

相關問題