所以这是场景......我有一个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" />
答案 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方法序列化字符串并读取字符串呢?