2016-07-15 53 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(); 
} 

这一切!再见!

相关问题