【问题标题】:XML/RDF to Java Objects with XSD使用 XSD 将 XML/RDF 转换为 Java 对象
【发布时间】:2010-05-17 00:45:52
【问题描述】:

所以这是场景...我有一个 XSD 文件,描述了我需要的所有对象。我可以使用 JAXB 在 Java 中创建对象没问题。我有一个需要解析为这些对象的 XML/RDF 文件。

最简单的方法是什么?

我一直在研究 Jena 并使用它,但看不到如何轻松地将 XML/RDF 文件映射到生成的 XSD 对象。这是 XSD 文件和 XML/RDF 文件的 sn-p:

<?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" />

【问题讨论】:

  • 我不清楚你在问什么。你说你可以用 JAXB 管理它没有问题,那么问题是什么?
  • 我可以使用 XSD 文件中的 JAXB 创建自己的类....但是使用 Jena 我不能获取一个 ACTUAL RDF/XML 文件并将它们作为这些创建的类的对象导入。当我解析 RDF/XML 文件时,我得到的只是具有资源/主题/等的 Jena 对象......而不是我在 xsd 文件上使用 JAXB 获得的格式的一堆对象。

标签: java xml jaxb rdf jena


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    如果您根本不想编写任何 Java 代码来执行此操作,您可以编写一些 XSLT 或 XQuery 来将您的 RDF/XML 直接转换为所需的 XML,但这听起来像考虑到您已经拥有的,将比上述选项工作更多。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-15
        • 1970-01-01
        相关资源
        最近更新 更多