2010-05-05 6 views
1

Итак, вот сценарий ... У меня есть XSD-файл, описывающий все объекты, которые мне нужны. Я могу создать объекты в Java с помощью JAXB без проблем. У меня есть файл XML/RDF, который мне нужно проанализировать в этих объектах.XML/RDF для объектов Java с XSD

Что такое ЛАЗЕРНЫЙ способ сделать это?

Я изучал Йену и играл с ней, но не могу понять, как легко сопоставить файл 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" /> 
+1

Я не совсем понимаю, что вы просите. Вы сказали, что не можете справиться с JAXB, так что в чем проблема? – skaffman

+0

Я могу создавать классы самостоятельно с помощью JAXB из файла XSD .... но с использованием Jena я не могу взять файл ACTUAL RDF/XML и импортировать их как объекты этих созданных классов. Когда я разбираю RDF/XML-файл, все, что я получаю, это объекты Jena, у которых есть Resource/Subject/etc ... Не куча объектов в формате, который я получил с помощью JAXB в файле xsd. –

ответ

2

Вы можете выполнять итерацию с помощью операторов RDF и заполнять ваши компоненты JAXB с помощью утилиты для сбора данных Bean, например BeanUtils.

Итерации операторов в такой форме, что операторы с одним и тем же предметом обрабатываются в группе. Операторы rdf: type определяют, какой класс следует создавать, а остальные могут быть отображены в свойства созданных компонентов.

Если вы знакомы с отражением Java, то это, вероятно, довольно просто.

0

ли ресурсов/Тема/и т.д. объекты не имеют каких-либо методов преобразование в элемент DOM? Альтернативно (не самое точное решение наверняка), как насчет сериализации для строки и чтения строки, а затем с использованием созданных JAXB (из XSD) методов настройки объектов?

1

Непонятно из вашего сообщения - любое сопоставление между компонентами XSD и данными конкретного ресурса, которые у вас есть в RDF (или их схемах, например RDFS или OWL, или и то и другое). Если вы понимаете это сопоставление, то у вас есть реализация JAXB для создания объектов Java уже (с целью их заполнения данными, представленными как RDF) и реализация Jena для разбора RDF/XML в Java, то я предлагаю вам реализовать Java-мост - эффективно настраиваемый код, который запрашивает Jena-модель данных RDF, чтобы сопоставить ее с новыми объектами классов, сгенерированными JAXB, которые затем могут быть привязаны к требуемому XML.

Если вы не хотите писать код Java на все, чтобы сделать это, вы могли бы написать какой-нибудь XSLT или XQuery, чтобы превратить ваш RDF/XML непосредственно в требуемом формате XML, но это звучит, как это будет больше работы чем вышеупомянутый вариант, учитывая то, что у вас уже есть.