1

所以这是场景......我有一个 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" />
4

3 回答 3

2

您可以遍历 RDF 语句并通过像BeanUtils这样的 Bean 填充实用程序填充 JAXB bean 。

以这样的形式迭代语句,使得具有相同主题的语句在一个组中处理。rdf:type 语句定义了要实例化的类,其余的可以映射到创建的 bean 的属性。

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

于 2010-05-16T16:45:52.983 回答
1

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

如果您根本不想编写任何 Java 代码来执行此操作,您可以编写一些 XSLT 或 XQuery 来将您的 RDF/XML直接转换为所需的 XML,但这听起来比前面提到的选项更有效。你已经有了。

于 2010-05-11T08:09:31.760 回答
0

Resource/Subject/etc 对象没有任何转换为​​ DOM 元素的方法吗?或者(肯定不是最简洁的解决方案)如何序列化为字符串并读取字符串然后使用 JAXB 创建的(来自 XSD)对象的 setter 方法?

于 2010-05-07T22:10:56.873 回答