rdf实际应用java代码,使用Spring MVC提供Java模型的RDF表示?

How can I serve an RDF representation of a Java model via Spring MVC?

I have JSON and XML representations working using Spring's content negotiation mechanisms and would like to do the same for RDF.

解决方案

Assuming that you are using annotation driven configuration for your MVC application, this actually could be quite simple. Using the W3C's Media Types Issues for Text RDF Formats as a guide for content type specification, it's quite easy to augment your existing solution. The real question is what is your desired serialization type when a request for RDF is made? If we are utilizing Jena as the underlying model technology, then supporting any of the standard serializations is trivial out of the box. Json is the only one that provided me with a little difficulty, but you have already solved that.

As you can see, the implementation of the serialization (using standard Jena, and no additional libraries) is actually quite easy to do! The problem is ultimately just matching the proper serialization to the provided content-type.

EDIT April 19th, 2014

Previous content types were from a document capturing discussions of the working group. The post has been edited to reflect the content types of the IANA Media Type registry supplemented with the RDF1.1 N-Triples and JSON-LD standards.

@Controller

public class SpecialController

{

public Model model = null; // set externally

@RequestMapping(value="your/service/location", method=RequestMethod.GET, produces={"application/x-javascript", "application/json", "application/ld+json"})

public @ResponseBody String getModelAsJson() {

// Your existing json response

}

@RequestMapping(value="your/service/location", method=RequestMethod.GET, produces={"application/xml", "application/rdf+xml"})

public @ResponseBody String getModelAsXml() {

// Note that we added "application/rdf+xml" as one of the supported types

// for this method. Otherwise, we utilize your existing xml serialization

}

@RequestMapping(value="your/service/location", method=RequestMethod.GET, produces={"application/n-triples"})

public @ResponseBody String getModelAsNTriples() {

// New method to serialize to n-triple

try( final ByteArrayOutputStream os = new ByteArrayOutputStream() ){

model.write(os, "N-TRIPLE");

return os.toString();

}

}

@RequestMapping(value="your/service/location", method=RequestMethod.GET, produces={"text/turtle"})

public @ResponseBody String getModelAsTurtle() {

// New method to serialize to turtle

try( final ByteArrayOutputStream os = new ByteArrayOutputStream() ){

model.write(os, "TURTLE");

return os.toString();

}

}

@RequestMapping(value="your/service/location", method=RequestMethod.GET, produces={"text/n3"})

public @ResponseBody String getModelAsN3() {

// New method to serialize to N3

try( final ByteArrayOutputStream os = new ByteArrayOutputStream() ){

model.write(os, "N3");

return os.toString();

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值