使用XSD的XML / RDF到Java对象

时间:2010-05-05 17:17:01

标签: java xml jaxb rdf jena

所以这是场景......我有一个XSD文件描述了我需要的所有对象。我可以使用JAXB在Java中创建对象没问题。我有一个XML / RDF文件,我需要解析这些对象。

最简单的方法是什么?

我一直在调查Jena并且已经玩过它,但是看不出如何轻松地将XML / RDF文件映射到生成的XSD对象。以下是XSD文件的片段以及XML / RDF文件:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:a="http://langdale.com.au/2005/Message#" 
    xmlns:sawsdl="http://www.w3.org/ns/sawsdl" 
    targetNamespace="http://iec.ch/TC57/2007/profile#" 
    elementFormDefault="qualified" 
    attributeFormDefault="unqualified" 
    xmlns="http://langdale.com.au/2005/Message#" 
    xmlns:m="http://iec.ch/TC57/2007/profile#">
<xs:annotation/>
<xs:element name="Profile" type="m:Profile"/>
<xs:complexType name="Profile">
<xs:sequence>
<xs:element name="Breaker" type="m:Breaker" minOccurs="0" maxOccurs="unbounded"/>

XML / RDF:

<!-- CIM XML Output For switch783:(295854688) -->
<cim:Switch rdf:ID="Switch_295854688">
    <cim:IdentifiedObject.mRID>Switch_295854688</cim:IdentifiedObject.mRID>
    <cim:IdentifiedObject.aliasName>Switch_295854688</cim:IdentifiedObject.aliasName>
    <cim:ConductingEquipment.phases 
        rdf:resource="http://iec.ch/TC57/2009/CIM-schema-cim14#PhaseCode.ABC" />
    <cim:Switch.circuit2>0001406</cim:Switch.circuit2>
    <cim:Equipment.Line rdf:resource="#Line_0001406" />

3 个答案:

答案 0 :(得分:2)

您可以遍历RDF语句并通过像BeanUtils这样的Bean填充实用程序填充JAXB bean。

以一种形式迭代语句,即在一个组中处理具有相同主题的语句。 rdf:type语句定义要实例化的Class,其余的可能映射到创建的bean的属性。

如果您熟悉Java反射,那么这可能非常简单。

答案 1 :(得分:1)

您的帖子中不清楚的是XSD组件与您在RDF(或其架构,如RDFS或OWL或两者)中的特定资源数据之间的任何映射。 如果你理解了这个映射,那么你已经有了一个JAXB实现来创建Java对象(用一个视图来填充表示为RDF的数据) 一个Jena实现为了解析Java中的RDF / XML,我建议你可以实现一个Java'桥' - 有效的自定义代码,用于查询RDF数据的Jena模型,将其映射到JAXB生成的类的新对象,然后被编组到所需的XML。

如果您不想编写任何Java代码来执行此操作,您可以编写一些XSLT或XQuery将RDF / XML 直接转换为到所需的XML中,但这听起来像它鉴于你已经拥有的东西,将比上述选项更多的工作。

答案 2 :(得分:0)

Resource / Subject / etc对象没有任何转换为​​DOM Element的方法吗? 或者(肯定不是最好的解决方案)然后使用JAXB创建的(从XSD)对象的setter方法序列化字符串并读取字符串呢?