저는 Jena에 익숙하며 Java에 많은 경험이 없습니다. 모델에서 명령문을 삭제하는 프로그램을 만들려고합니다. (그래프를 사용하고 SPARUL 쿼리를 실행하는 대체 방법에 대해 알고 있지만 대신 모델을 사용하고 싶습니다.) 나는 model.remove (statement)를 사용해 보았지만, 제대로하지 못하고있는 것 같다. 위의 방법의 예를 검색했지만 찾지 못했습니다. 누군가 내가 잘못하고있는 곳에서 나를 도울 수 있습니까? 한 문장을 삭제하는 것으로 시작하고 싶습니다. 그 후에 여러 문장을 지우고 싶습니다. 아래 코드를 포함합니다. 덕분에 도움을 사전에Jena에서 model.remove (statement) 사용하기
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Calendar;
import java.util.Date;
import com.hp.hpl.jena.query.Query;
import com.hp.hpl.jena.query.QueryExecution;
import com.hp.hpl.jena.query.QueryExecutionFactory;
import com.hp.hpl.jena.query.QueryFactory;
import com.hp.hpl.jena.query.ResultSet;
import com.hp.hpl.jena.query.ResultSetFormatter;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.rdf.model.Resource;
import com.hp.hpl.jena.rdf.model.ResourceFactory;
import com.hp.hpl.jena.util.FileManager;
import com.hp.hpl.jena.vocabulary.VCARD;
public class Test3 extends Object {
public static void main(String[] args) throws IOException {
final String inputFileName = "vc-db-1.rdf";
Model model = ModelFactory.createDefaultModel();
InputStream in = FileManager.get().open(inputFileName);
if (in == null) {
throw new IllegalArgumentException ("File: " + inputFileName + " not found");
}
model.read(new InputStreamReader(in), "");
in.close();
System.out.println("== Before removal ==");
model.write(System.out);
System.out.println("\n\n== After removal ==");
model.remove(model.createResource("http://somewhere/JohnSmith"),
VCARD.FN, // or ResourceFactory.createProperty("http://www.w3.org/2001/vcard-rdf/3.0#FN");
ResourceFactory.createTypedLiteral("John Smith"));
model.write(System.out);
}
}
출력은
== Before removal ==
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:vCard="http://www.w3.org/2001/vcard-rdf/3.0#" >
.....Other statements
<rdf:Description rdf:about="http://somewhere/JohnSmith/">
<vCard:N rdf:nodeID="A3"/>
<vCard:FN>John Smith</vCard:FN>
</rdf:Description>
<rdf:Description rdf:nodeID="A3">
<vCard:Given>John</vCard:Given>
<vCard:Family>Smith</vCard:Family>
</rdf:Description>
</rdf:RDF>
== After removal ==
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:vCard="http://www.w3.org/2001/vcard-rdf/3.0#" >
...Other Statements
<rdf:Description rdf:about="http://somewhere/JohnSmith/">
<vCard:N rdf:nodeID="A3"/>
<vCard:FN>John Smith</vCard:FN>
</rdf:Description>
<rdf:Description rdf:nodeID="A3">
<vCard:Given>John</vCard:Given>
<vCard:Family>Smith</vCard:Family>
</rdf:Description>
</rdf:RDF>
을 다음과 어떻게 든 문을 삭제 한 후 모델의 변경 사항을 '확인은/커밋'해야합니까?
감사 여호수아, 내가 속성을 생성하지 않고 문을 삭제할 수있는 방법이 있나요 또는 자원? RDF 파일을 모델로 읽어 들인 다음 특정 문을 삭제하고 싶습니다 (SQL의 delete 문을 사용하는 것과 같습니다). 감사. – Syed
@Syed 'null'을 와일드 카드로 사용할 수 있지만 삭제할 문장을 식별 할 수있는 방법을 제공해야합니다. 삭제할 항목을 어떻게 알 수 있습니까? 위의 예제에서 URI에 직접 코드를 작성하려고 시도하고 예제를 수정하려고하면 'new Resource (http : // somewhere/JohnSmith ", ...)로 포장해야합니다. . 어떤 진술을 실제로 삭제 하시겠습니까? –
@Syed 필자는 예를 기반으로 사용하고자하는 것처럼 보이는 'remove'에 대한 특정 호출을 보여주기 위해 응답을 업데이트했습니다. –