XML/RDF към Java обекти с XSD

И така, ето сценария... Имам 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" />

person Blaine Mucklow    schedule 05.05.2010    source източник
comment
Не ми е ясно какво питаш. Казахте, че можете да го управлявате с JAXB без проблем, така че какъв е проблемът?   -  person skaffman    schedule 05.05.2010
comment
Мога да създам самите класове с помощта на JAXB от XSD файла....но с помощта на Jena не мога да взема ДЕЙСТВИТЕЛЕН RDF/XML файл и да ги импортирам като обекти на тези създадени класове. Когато анализирам RDF/XML файла, всичко, което получавам, са Jena обекти, които имат Resource/Subject/etc... Не куп обекти във формата, който получих с помощта на JAXB на xsd файла.   -  person Blaine Mucklow    schedule 06.05.2010


Отговори (3)


Можете да преминете през RDF изразите и да попълните вашите JAXB bean-ове чрез помощна програма за популация на Bean като BeanUtils.

Итерирайте изявленията в такава форма, че изявленията с една и съща тема да се обработват в група. Изявленията rdf:type определят кой клас да се инстанцира, а останалите вероятно могат да бъдат картографирани към свойствата на създадените bean-ове.

Ако сте запознати с отражението на Java, това вероятно е доста лесно.

person Timo Westkämper    schedule 16.05.2010

Това, което не става ясно от публикацията ви, е всяко съпоставяне между XSD компонентите и конкретните данни за ресурсите, които имате в RDF (или негова схема, като RDFS или OWL, или и двете). Ако разбирате това съпоставяне, тогава имате реализация на JAXB за създаване на Java обекти вече (с оглед на попълването им с данните, представени като RDF) и реализация на Jena за анализиране на RDF/XML в Java, тогава предлагам да приложите „мост“ на Java – ефективно персонализиран код, който отправя заявки към модела на Jena на RDF данните, за да ги картографира в нови обекти на класовете, както са генерирани от JAXB, което може след това да бъдат маршалирани до необходимия XML.

Ако предпочитате изобщо да не пишете Java код, за да направите това, можете да напишете някакъв XSLT или XQuery, за да трансформирате вашия RDF/XML директно в необходимия XML, но това звучи така, сякаш ще бъде по- работа от гореспоменатата опция предвид това, което вече имате.

person Community    schedule 11.05.2010

Обектите Resource/Subject/etc нямат ли методи за конвертиране в DOM елемент? Като алтернатива (със сигурност не е най-прецизното решение) какво ще кажете за сериализиране в низ и четене на низа след това с помощта на създадените от JAXB (от XSD) методи за настройка на обекти??

person bcmoney    schedule 07.05.2010