Server: Use target graph name as base URI

Task: #498
pull/507/head
Tpt 2 years ago committed by Thomas Tanon
parent 38af275451
commit d26731432c
  1. 56
      server/src/main.rs

@ -1537,19 +1537,24 @@ fn web_load_graph(
format: GraphFormat, format: GraphFormat,
to_graph_name: GraphNameRef<'_>, to_graph_name: GraphNameRef<'_>,
) -> Result<(), HttpError> { ) -> Result<(), HttpError> {
let base_iri = if let GraphNameRef::NamedNode(graph_name) = to_graph_name {
Some(graph_name.as_str())
} else {
None
};
if url_query_parameter(request, "no_transaction").is_some() { if url_query_parameter(request, "no_transaction").is_some() {
web_bulk_loader(store, request).load_graph( web_bulk_loader(store, request).load_graph(
BufReader::new(request.body_mut()), BufReader::new(request.body_mut()),
format, format,
to_graph_name, to_graph_name,
None, base_iri,
) )
} else { } else {
store.load_graph( store.load_graph(
BufReader::new(request.body_mut()), BufReader::new(request.body_mut()),
format, format,
to_graph_name, to_graph_name,
None, base_iri,
) )
} }
.map_err(loader_to_http_error) .map_err(loader_to_http_error)
@ -2381,6 +2386,53 @@ mod tests {
) )
} }
#[test]
fn graph_store_base_url() -> Result<()> {
let server = ServerTest::new()?;
// POST
let request = Request::builder(
Method::POST,
"http://localhost/store?graph=http://example.com".parse()?,
)
.with_header(HeaderName::CONTENT_TYPE, "text/turtle")?
.with_body("<> <http://example.com/p> <http://example.com/o1> .");
server.test_status(request, Status::NO_CONTENT)?;
// GET
let request = Request::builder(
Method::GET,
"http://localhost/store?graph=http://example.com".parse()?,
)
.with_header(HeaderName::ACCEPT, "application/n-triples")?
.build();
server.test_body(
request,
"<http://example.com> <http://example.com/p> <http://example.com/o1> .\n",
)?;
// PUT
let request = Request::builder(
Method::PUT,
"http://localhost/store?graph=http://example.com".parse()?,
)
.with_header(HeaderName::CONTENT_TYPE, "text/turtle")?
.with_body("<> <http://example.com/p> <http://example.com/o2> .");
server.test_status(request, Status::NO_CONTENT)?;
// GET
let request = Request::builder(
Method::GET,
"http://localhost/store?graph=http://example.com".parse()?,
)
.with_header(HeaderName::ACCEPT, "application/n-triples")?
.build();
server.test_body(
request,
"<http://example.com> <http://example.com/p> <http://example.com/o2> .\n",
)
}
#[test] #[test]
fn graph_store_protocol() -> Result<()> { fn graph_store_protocol() -> Result<()> {
// Tests from https://www.w3.org/2009/sparql/docs/tests/data-sparql11/http-rdf-update/ // Tests from https://www.w3.org/2009/sparql/docs/tests/data-sparql11/http-rdf-update/

Loading…
Cancel
Save