Seongho Lim/Jena/JenaTutorial
Retired DISLab
- Tutorial 1, 2는 트리플의 생성방법
목차 |
Tutorial 1
- Create an empty model
Model model = ModelFactory.createDefaultModel();
- Create the resource
Resource johnSmith = model.createResource(personURI);
- Add a property to this resource
johnSmith.addProperty(VCARD.FN, fullName);
Tutorial 2
- 여러개의 property 생성시
model.createResource() .addProperty(VCARD.Given, givenName) .addProperty(VCARD.Family, familyName));
- Tutorial 3 ~ 8은 탐색과 출력방법
Tutorial 3
- Statement interface는 Statement 에서 트리플을 access하는 method를 제공
StmtIterator iter = model.listStatements();
while(iter.hasNext()) { Statement stmt = iter.nextStatement(); Resource subject = stmt.getSubject(); Property predicate = stmt.getPredicate(); RDFNode object = stmt.getObject(); }
Tutorial 4
- 표준 출력으로 출력하는 방법
model.write(System.out);
- 한줄이면 RDF문서가 화면에 출력된다.
Tutorial 5
- model로 RDF XML statements를 읽어오는 방법
InputStream in = FileManager.get().open( inputFileName ); if (in == null) { //예외 처리 throw new IllegalArgumentException( "File: " + inputFileName + " not found"); } model.read(in, "");
- 하면 rdf문서로부터 statements를 생성하고 다시
model.write(System.out);
- 해주면 화면에 그대로 출력.
Tutorial 6
- 원하는 object 찾아 출력
StmtIterator iter = vcard.listProperties(VCARD.NICKNAME); while (iter.hasNext()) { System.out.println(" " + iter.nextStatement().getObject().toString())); }
Tutorial 7
- 모든 자원에서 VCARD.FN의 속성을 출력
ResIterator iter = model.listSubjectsWithProperty(VCARD.FN); if (iter.hasNext()) { While (iter.hasNext()) { System.out.println(" " + iter.nextResource() .getRequiredProperty(VCARD.FN) .getString()); } }
Tutorial 8
- Tutorial 7과 비교해 보아야 함
StmtIterator iter = model.listStatements( new SimpleSelector(null, VCARD.FN, (RDFNode) null); { public boolean selects(Statement s) { return s.getString().endsWith("Smith"); } }; if (iter.hasNext()) { while (iter.hasNext()) { System.out.println(" " + iter.nextStatement() .getString(); } } else { //Smith가 발견되지 않음 }
- Tutorial 7과 비슷하지만 selects(Statement s)를 오버라이딩 하여 Smith로 끝나는 사람만을 검색하였다.
Tutorial 9
- 두 모델의 결합(합집합)
Model model = model1.union(model2);
- Model1에는 있고 model2에는 없는 Statement들의 집합(차집합)
Model model = model1.difference(model2);
- Model1과 Model2 둘다 존재하는 Statement들의 집합(교집합)
Model model = model1.intersection(model2);
Tutorial 10
- RDF는 물체들의 집합으로 표현된 Resources의 특별한 종류를 정의. 이 Resources를 Containers라고 부른다.
- Container의 종류는 BAG(Unordered), ALT(Unordered 하나만 선택하는 것을 지향), SEQ(Ordered)
- Tutorial 8처럼 smith를 검색하는 방법처럼 smith에 대한 BAG을 만들 수도 있다.
Bag smiths = model.createBag(); StmtIterator iter = model.listStatements( new SimpleSelector(null, VCARD.FN, (RDFNode) null); { public boolean selects(Statement s) { return s.getString().endsWith("Smith"); } }; // add the Smith's to the bag while (iter.hasNext()) { smiths.add(iter.nextStatement().getSubject()); }