tell me the difference between the following code and the code I showed you before
package IR.Practica6;

import org.apache.jena.rdf.model.InfModel;
import org.apache.jena.rdf.model.Model;
import org.apache.jena.rdf.model.ModelFactory;
import org.apache.jena.rdf.model.Property;
import org.apache.jena.rdf.model.RDFNode;
import org.apache.jena.rdf.model.Resource;
import org.apache.jena.vocabulary.OWL;
import org.apache.jena.vocabulary.RDF;
import org.apache.jena.vocabulary.RDFS;

import openllet.jena.PelletReasonerFactory;

/\*\*
 \* Crea un modelo con una jerarquia de clases y propiedades y le aplica el modelo
 \* de inferencia de OWL2.
 \* Como razonador integrado con jena usamos Pellet
 \* Compara el resultado de consultas a la jerarquiía definida con y sin inferencia
 \*/
public class B\_InferenciaOWL2 {

 public static void main (String args[]) {
 String NS = "urn:x-hp-jena:eg/";
 
 // contruimos un modelo secillo de seres vivos y sus relaciones
 Model rdfsExample = ModelFactory.createDefaultModel();
 //Definimos una jerarquía de clases de seres vivos
 Resource animalClass = rdfsExample.createResource(NS+"Animal");
 animalClass.addProperty(RDF.type, RDFS.Class);
 Resource mamiferoClass = rdfsExample.createResource(NS+"Mamifero");
 animalClass.addProperty(RDFS.subClassOf, mamiferoClass);
 Resource humanoClass = rdfsExample.createResource(NS+"Humano");
 humanoClass.addProperty(RDFS.subClassOf, animalClass);
 
 //definimos las relaciones hijo, e hijo adoptivo
 Property hijoDe = rdfsExample.createProperty(NS, "hijoDe");
 Property padreDe = rdfsExample.createProperty(NS, "padreDe");
 padreDe.addProperty(OWL.inverseOf, hijoDe);
 
 rdfsExample.add(hijoDe, RDF.type, RDF.Property);
 hijoDe.addProperty(RDFS.domain, animalClass);
 hijoDe.addProperty(RDFS.range, animalClass);
 
 Property hijoAdoptDe = rdfsExample.createProperty(NS, "hijoAdoptivoDe");
 rdfsExample.add(hijoAdoptDe, RDFS.subPropertyOf, hijoDe);
 hijoAdoptDe.addProperty(RDFS.domain, humanoClass);
 hijoAdoptDe.addProperty(RDFS.range, humanoClass);
 
 //añadimos las instancias al modelo y sus relaciones
 Resource luis = rdfsExample.createResource(NS+"Luis");
 Resource juan = rdfsExample.createResource(NS+"Juan"); 
 luis.addProperty(hijoAdoptDe, juan);
 
 //mostramos el modelo sin inferencia
 System.out.println("------------------------------");
 rdfsExample.write(System.out,"TURTLE"); 
 System.out.println("------------------------------");
 
 //creamos un modelo de inferencia OWL2
 InfModel inf = ModelFactory.createInfModel(PelletReasonerFactory.theInstance().create(), rdfsExample);
 
 //borramos elementos del modelo para facilitar la visualizacion de lo que nos interesa
 Model model2 = borrarRecursosOWL(inf);
 
 //mostramos el fragmento deseado del modelo inferido
 System.out.println("------------------------------");
 model2.write(System.out,"TURTLE"); 
 System.out.println("------------------------------");
 }
 
 /\*\*
 \* borramos las clases del modelo rdfs que se añaden automáticamene al hacer la inferencia
 \* simplemente para facilitar la visualización de la parte que nos interesa
 \* si quieres ver todo lo que genera el motor de inferencia comenta estas lineas
 \*/
 private static Model borrarRecursosOWL(Model inf) {
 //hacemos una copia del modelo ya que el modelo inferido es inmutable
 Model model2 = ModelFactory.createDefaultModel();
 model2.add(inf);
 model2.removeAll(inf.createResource("http://www.w3.org/2002/07/owl#topDataProperty"), null, (RDFNode)null);
 model2.removeAll(inf.createResource("http://www.w3.org/2002/07/owl#topObjectProperty"), null, (RDFNode)null);
 model2.removeAll(inf.createResource("http://www.w3.org/2002/07/owl#Thing"), null, (RDFNode)null);
 model2.removeAll(inf.createResource("http://www.w3.org/2002/07/owl#bottomObjectProperty"), null, (RDFNode)null);
 model2.removeAll(inf.createResource("http://www.w3.org/2002/07/owl#Nothing"), null, (RDFNode)null);
 model2.removeAll(inf.createResource("http://www.w3.org/2002/07/owl#bottomDataProperty"), null, (RDFNode)null);
 
 return model2;
 }
 
 
}
다음 코드와 이전에 보여드린 코드의 차이점을 알려주세요.
패키지 IR.Practica6;

import org.apache.jena.rdf.model.InfModel;
import org.apache.jena.rdf.model.Model;
import org.apache.jena.rdf.model.ModelFactory; import org.apache.jena.rdf.model.ModelFactory;
org.apache.jena.rdf.model.Property를 임포트한다;
import org.apache.jena.rdf.model.RDFNode; import org.apache.jena.rdf.model.RDFNode;
org.apache.jena.rdf.model.Resource를 임포트한다;
org.apache.jena.vocabulary.OWL을 임포트한다;
org.apache.jena.vocabulary.RDF를 임포트한다;
import org.apache.jena.vocabulary.RDFS; import org.apache.jena.vocabulary.RDFS;

openllet.jena.PelletReasonerFactory를 임포트합니다;

/\*\*
 \* 클래스 및 속성의 계층 구조로 모델을 생성하고 모델을 적용합니다.
 \* OWL2의 추론 모델입니다.
 \* jena와 통합된 추론기로서 Pellet을 사용합니다.
 \* 쿼리 결과를 정의된 계층 구조와 추론 유무에 따라 비교합니다.
 \*/
public class BInferenceOWL2 {

 
 String NS = "urn:x-hp-jena:eg/";
 
 // 생명체와 그 관계에 대한 간단한 모델을 구축합니다.
 Model rdfsExample = ModelFactory.createDefaultModel();
 //생물의 클래스 계층구조를 정의합니다.
 리소스 animalClass = rdfsExample.createResource(NS+"동물");
 animalClass.addProperty(RDF.type, RDFS.Class);
 Resource mammalClass = rdfsExample.createResource(NS+"Mammal");
 animalClass.addProperty(RDFS.subClassOf, mammalClass);
 리소스 humanClass = rdfsExample.createResource(NS+"Human");
 humanClass.addProperty(RDFS.subClassOf, animalClass);
 
 //자녀 및 입양 자녀 관계 정의
 속성 childFrom = rdfsExample.createProperty(NS, "childFrom");
 속성 parentFrom = rdfsExample.createProperty(NS, "parentFrom");
 parentFrom.addProperty(OWL.inverseOf, childFrom);
 
 rdfsExample.add(childFrom, RDF.type, RDF.Property);
 childFrom.addProperty(RDFS.domain, animalClass);
 childFrom.addProperty(RDFS.range, animalClass);
 
 속성 sonAdoptDe = rdfsExample.createProperty(NS, "sonAdoptiveDe");
 rdfsExample.add(sonAdoptDe, RDFS.subPropertyOf, sonFrom);
 childAdoptFrom.addProperty(RDFS.domain, humanClass);
 childAdoptDe.addProperty(RDFS.range, humanoClass);
 
 //모델과 그 관계에 인스턴스 추가
 리소스 루이스 = rdfsExample.createResource(NS+"루이스");
 리소스 후안 = rdfsExample.createResource(NS+"Juan"); 
 luis.addProperty(sonAdoptDe, juan);
 
 //추론 없이 모델 표시
 System.out.println("------------------------------");
 rdfsExample.write(System.out, "TURTLE"); 
 System.out.println("------------------------------");
 
 // OWL2 추론 모델 만들기
 InfModel inf = ModelFactory.createInfModel(PelletReasonerFactory.theInstance().create(), rdfsExample);
 
 //모델에서 요소를 삭제하여 관심 있는 내용을 더 쉽게 볼 수 있도록 합니다.
 모델 model2 = deleteResourcesOWL(inf);
 
 //유추된 모델의 원하는 조각을 표시합니다.
 System.out.println("------------------------------");
 model2.write(System.out, "TURTLE"); 
 System.out.println("------------------------------");
 }
 
 /\*\*
 \* 추론을 수행할 때 자동으로 추가되는 rdfs 모델 클래스를 삭제합니다.
 \* 관심 있는 부분만 보기 쉽게 하기 위해서입니다.
 \* 추론 엔진이 생성하는 모든 것을 보려면 다음 줄에 주석을 달아주세요.
 \*/
 private static Model borrarRecursosOWL(Model inf) {
 // 추론된 모델은 불변이므로 모델의 복사본을 만듭니다.
 모델 model2 = ModelFactory.createDefaultModel();
 model2.add(inf);
 model2.removeAll(inf.createResource("http://www.w3.org/2002/07/owl#topDataProperty"), null, (RDFNode)null);
 model2.removeAll(inf.createResource("http://www.w3.org/2002/07/owl#topObjectProperty"), null, (RDFNode)null);
 model2.removeAll(inf.createResource("http://www.w3.org/2002/07/owl#Thing"), null, (RDFNode)null);
 model2.removeAll(inf.createResource("http://www.w3.org/2002/07/owl#bottomObjectProperty"), null, (RDFNode)null);
 model2.removeAll(inf.createResource("http://www.w3.org/2002/07/owl#Nothing"), null, (RDFNode)null);
 model2.removeAll(inf.createResource("http://www.w3.org/2002/07/owl#bottomDataProperty"), null, (RDFNode)null);
 
 반환 모델2;
 }
 
 
}