Jena:只有 well-formed 绝对 URIrefs 可以包含在 RDF/XML 输出中:<A>
Jena: Only well-formed absolute URIrefs can be included in RDF/XML output: <A>
我正在从构建 RDF 的 csv 文件中执行解析器。现在它只是将 csv 的 header 添加为 属性 及其值。
当我尝试将输出写为 XML 时,出现此错误:
Caused by: org.apache.jena.shared.BadURIException: Only well-formed absolute URIrefs can be included in RDF/XML output: <A> Code: 57/REQUIRED_COMPONENT_MISSING in SCHEME: A component that is required by the scheme is missing.
但是当我把它写成 json 时,我得到了正确的输出。
有谁知道我做错了什么?
代码:
public List<Model> createRDF(File file) throws Exception { //TODO implement custom Exceptions
Csv csv = CsvReader.convertFileToCsv(file);
List<Model> modelList = new ArrayList<>();
for(int i = 1; i < csv.lines.length; i++) {
Model model = ModelFactory.createDefaultModel();
Resource r = model.createResource( "http://provisionalUri.com/" + i);
addProperties(r, csv, model, i);
modelList.add(model);
}
return modelList;
}
private void addProperties(Resource r, Csv csv, Model model, int i) {
for(int j = 0; j < csv.lines[i].length; j++) { // if the columns have different length this will cause problems
Property property = model.createProperty(csv.headers[j]);
Literal value = model.createLiteral(csv.lines[i][j]);
model.add(r, property, value);
}
}
写作:
List<Model> models = service.createRDF(new File("./src/test/java/resources/test/Bienes_declarados_Patrimonio_mundial_de_la_UNESCO_en_España.csv"));
for(Model model: models){
RDFDataMgr.write(System.out, model, Lang.RDFXML);
}
RDF/XML 比 JSON-LD 对 URI 的要求更高,因为属性将被写为 XML qnames。
model.createProperty(csv.headers[j]);
不是合法的绝对 URI,除非您注意 CSV headers.
需要两件事:
- 需要编码 "csv.headers[j]" 以防它包含对 URI 不利的字符。
- 需要一个正确的 URI,例如在前面加一个“http://HOST/”:
model.createProperty("http://example/"+encode(csv.headers[j]));
我正在从构建 RDF 的 csv 文件中执行解析器。现在它只是将 csv 的 header 添加为 属性 及其值。 当我尝试将输出写为 XML 时,出现此错误:
Caused by: org.apache.jena.shared.BadURIException: Only well-formed absolute URIrefs can be included in RDF/XML output: <A> Code: 57/REQUIRED_COMPONENT_MISSING in SCHEME: A component that is required by the scheme is missing.
但是当我把它写成 json 时,我得到了正确的输出。
有谁知道我做错了什么? 代码:
public List<Model> createRDF(File file) throws Exception { //TODO implement custom Exceptions
Csv csv = CsvReader.convertFileToCsv(file);
List<Model> modelList = new ArrayList<>();
for(int i = 1; i < csv.lines.length; i++) {
Model model = ModelFactory.createDefaultModel();
Resource r = model.createResource( "http://provisionalUri.com/" + i);
addProperties(r, csv, model, i);
modelList.add(model);
}
return modelList;
}
private void addProperties(Resource r, Csv csv, Model model, int i) {
for(int j = 0; j < csv.lines[i].length; j++) { // if the columns have different length this will cause problems
Property property = model.createProperty(csv.headers[j]);
Literal value = model.createLiteral(csv.lines[i][j]);
model.add(r, property, value);
}
}
写作:
List<Model> models = service.createRDF(new File("./src/test/java/resources/test/Bienes_declarados_Patrimonio_mundial_de_la_UNESCO_en_España.csv"));
for(Model model: models){
RDFDataMgr.write(System.out, model, Lang.RDFXML);
}
RDF/XML 比 JSON-LD 对 URI 的要求更高,因为属性将被写为 XML qnames。
model.createProperty(csv.headers[j]);
不是合法的绝对 URI,除非您注意 CSV headers.
需要两件事:
- 需要编码 "csv.headers[j]" 以防它包含对 URI 不利的字符。
- 需要一个正确的 URI,例如在前面加一个“http://HOST/”:
model.createProperty("http://example/"+encode(csv.headers[j]));