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

참고 자료

개인 도구
이름공간
변수
행위
둘러보기
구성원
연구
연구실
기타
도구모음
인쇄/내보내기