Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用XSD将XML/RDF转换为Java对象_Java_Xml_Jaxb_Rdf_Jena - Fatal编程技术网

使用XSD将XML/RDF转换为Java对象

使用XSD将XML/RDF转换为Java对象,java,xml,jaxb,rdf,jena,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.or

下面是一个场景……我有一个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" />

开关_295854688
开关_295854688
0001406

资源/Subject/etc对象是否没有任何转换为DOM元素的方法?
或者(当然不是最简单的解决方案)如何序列化为字符串并读取字符串,然后使用JAXB创建的(从XSD)对象的setter方法???

从您的帖子中不清楚的是XSD组件和RDF中的特定资源数据(或其模式,如RDFS或OWL,或两者)之间的任何映射. 如果您理解这个映射,那么假设您已经有了一个JAXB实现来创建Java对象(以期用RDF表示的数据填充它们)和一个Jena实现来解析Java中的RDF/XML,然后我建议您可以实现一个Java“桥”——有效的自定义代码,查询RDF数据的Jena模型,将其映射到JAXB生成的类的新对象中,然后将其封送到所需的XML


如果您不想编写任何Java代码来实现这一点,那么可以编写一些XSLT或XQuery来将RDF/XML直接转换为所需的XML,但是,考虑到您已有的功能,这听起来比前面提到的选项需要做更多的工作。

您可以迭代RDF语句,并通过一个Bean填充实用程序(例如)填充JAXB Bean

迭代语句,使具有相同主题的语句在一个组中处理。type语句定义实例化哪个类,其余的可能映射到所创建bean的属性


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

我不清楚您在问什么。你说你可以用JAXB来管理它没有问题,那么问题是什么呢?我可以使用JAXB从XSD文件中创建类本身……但是使用Jena,我不能获取实际的RDF/XML文件并将它们作为那些创建的类的对象导入。当我解析RDF/XML文件时,我得到的都是带有Resource/Subject/etc的Jena对象。。。不是我在xsd文件上使用JAXB获得的格式的一堆对象。