XML / RDF для объектов Java с XSD - PullRequest
1 голос
/ 05 мая 2010

Итак, вот сценарий ... У меня есть XSD-файл, описывающий все нужные мне объекты. Я могу создавать объекты в Java с использованием JAXB без проблем. У меня есть файл 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 ]

2 голосов
/ 16 мая 2010

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

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

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

1 голос
/ 11 мая 2010

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

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

0 голосов
/ 08 мая 2010

У объектов Resource / Subject / etc нет методов для преобразования в DOM-элемент? В качестве альтернативы (не самое удачное решение наверняка) как насчет сериализации в строку и чтения строки с последующим использованием методов установки созданных JAXB (из XSD) объектов ??

...