【发布时间】:2020-10-29 05:32:47
【问题描述】:
我目前正在使用 ODI 将 JSON 格式的数据导入 Oracle 数据库。我目前使用的是复杂文件拓扑,这需要我识别 JSON 文件和用于将其转换为 XML 的 XSD,然后才能将数据映射到数据库中的表中。
我有一个名为 sample.json 的 JSON 文件:
{"DATA_DS": {"G_1": [
{
"FIELDA": "Test Data ",
"FIELDB": "12345",
"FIELDC": " ",
"FIELDD": null,
"FIELDE": " Test Data"
}
]}}
我有一个名为 sample.xsd 的 XSD:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://TargetNamespace.com/InboundService" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" targetNamespace="http://TargetNamespace.com/InboundService" elementFormDefault="qualified" nxsd:version="JSON" nxsd:encoding="UTF-8">
<xsd:element name="Root-Element">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="DATA_DS">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="G_1" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="FIELDA" type="xsd:string"/>
<xsd:element name="FIELDB" type="xsd:string"/>
<xsd:element name="FIELDC" type="xsd:string"/>
<xsd:element name="FIELDD" type="xsd:string"/>
<xsd:element name="FIELDE" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
当尝试从 JSON 转换为 XML 时,它说它无法规范化。 经过进一步调查,我注意到该错误是由于 FIELDC 只有空间造成的。
我希望能够保留双引号内的所有内容,包括空格。
我尝试过两次更改 XSD,但无济于事。
- 创建了一个 simpleType 并更改了内部每个元素的类型以使用新的 simpleType:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://TargetNamespace.com/InboundService" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" targetNamespace="http://TargetNamespace.com/InboundService" elementFormDefault="qualified" nxsd:version="JSON" nxsd:encoding="UTF-8">
<xsd:element name="Root-Element">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="DATA_DS">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="G_1" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="FIELDA" type="stringspace"/>
<xsd:element name="FIELDB" type="stringspace"/>
<xsd:element name="FIELDC" type="stringspace"/>
<xsd:element name="FIELDD" type="stringspace"/>
<xsd:element name="FIELDE" type="stringspace"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:simpleType name="stringspace">
<xsd:restriction base="xsd:string">
<xsd:whiteSpace value="preserve" />
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
- 在每个元素内创建了一个 simpleType 并标识以保留空格:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://TargetNamespace.com/InboundService" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" targetNamespace="http://TargetNamespace.com/InboundService" elementFormDefault="qualified" nxsd:version="JSON" nxsd:encoding="UTF-8">
<xsd:element name="Root-Element">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="DATA_DS">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="G_1" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="FIELDA"><xsd:simpleType><xsd:restriction base="xsd:string"><xsd:whiteSpace value="preserve"/></xsd:restriction></xsd:simpleType></xsd:element>
<xsd:element name="FIELDB"><xsd:simpleType><xsd:restriction base="xsd:string"><xsd:whiteSpace value="preserve"/></xsd:restriction></xsd:simpleType></xsd:element>
<xsd:element name="FIELDC"><xsd:simpleType><xsd:restriction base="xsd:string"><xsd:whiteSpace value="preserve"/></xsd:restriction></xsd:simpleType></xsd:element>
<xsd:element name="FIELDD"><xsd:simpleType><xsd:restriction base="xsd:string"><xsd:whiteSpace value="preserve"/></xsd:restriction></xsd:simpleType></xsd:element>
<xsd:element name="FIELDE"><xsd:simpleType><xsd:restriction base="xsd:string"><xsd:whiteSpace value="preserve"/></xsd:restriction></xsd:simpleType></xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
我对整个 JSON、XML、XSD 领域还是个新手,因此我们将不胜感激任何形式的帮助。 提前非常感谢! :)
【问题讨论】:
标签: json xml xsd oracle-data-integrator