试图从DTD Schema创建动态临时表(数据集)? [OE10.1C]

时间:2015-01-30 17:03:52

标签: progress-4gl openedge

我正在尝试从外部DTD文件创建动态临时表和数据集。我试图简化一些xml代码POST / GET,并利用数据集的READ / WRITE XML函数。

我引用了READ-XMLSCHEMA的文档,它似乎做了我需要的,然而,我不断收到错误,无法弄清楚我做错了什么。

这是一个片段

DEFINE VARIABLE hTable                  AS HANDLE       NO-UNDO. 
DEFINE VARIABLE retOK                   AS LOGICAL      NO-UNDO.
DEFINE VARIABLE cSourceType             AS CHARACTER    NO-UNDO.
DEFINE VARIABLE cFile                   AS CHARACTER    NO-UNDO.
DEFINE VARIABLE lOverrideDefaultMapping AS LOGICAL      NO-UNDO.
DEFINE VARIABLE cFieldTypeMapping       AS CHARACTER    NO-UNDO.
DEFINE VARIABLE cVerifySchemaMode       AS CHARACTER    NO-UNDO. 

CREATE TEMP-TABLE hTable.

ASSIGN
    cSourceType = "file"
    cFile = "http://xml.cxml.org/schemas/cXML/1.2.025/InvoiceDetail.dtd"
    lOverrideDefaultMapping = NO
    cFieldTypeMapping = ?
    cVerifySchemaMode = ?.

retOK = hTable:READ-XMLSCHEMA (cSourceType,
                           cFile,
                           lOverrideDefaultMapping,
                           cFieldTypeMapping,
                           cVerifySchemaMode).

有没有人知道如何使用Openedge 10.1C实现这一目标。

由于

我收到的错误......

---------------------------
Error
---------------------------
Error reading XML file 'http://xml.cxml.org/schemas/cXML/1.2.025/InvoiceDetail.dtd'. (13035)
---------------------------
OK   
---------------------------
---------------------------
Error
---------------------------
READ-XML encountered an error while parsing the XML Document: FATAL ERROR:    file 'http://xml.cxml.org/schemas/cXML/1.2.025/InvoiceDetail.dtd', line '15',  column '2', message 'Expected comment or CDATA'. (13064)
---------------------------
OK   
---------------------------

1 个答案:

答案 0 :(得分:1)

我认为Progress正在寻找一个XSD文件 - 而不是DTD。查看您的链接并将其与我使用的工作XSD文件进行比较,它们看起来没什么相似之处。

Progress会喜欢的XSD示例如下:

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="" xmlns:prodata="urn:schemas-progress-com:xml-prodata:0001">
  <xsd:element name="tt_DBId" prodata:proTempTable="true">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="tt_DBIdRow" minOccurs="0" maxOccurs="unbounded">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="dbidLogName" type="xsd:string" nillable="true" prodata:label="DB Logical Name"/>
              <xsd:element name="dbidPhysName" type="xsd:string" nillable="true" prodata:label="DB Physical Name"/>
              <xsd:element name="dbidHost" type="xsd:string" nillable="true" prodata:label="DB Host Name"/>
            </xsd:sequence>
          </xsd:complexType>
        </xsd:element>
      </xsd:sequence>
    </xsd:complexType>
    <xsd:unique name="dbidLogName-idx" prodata:primaryIndex="true">
      <xsd:selector xpath=".//tt_DBIdRow"/>
      <xsd:field xpath="dbidLogName"/>
    </xsd:unique>
  </xsd:element>
</xsd:schema>

此外,10.1C不具备最佳兼容性。这是一个非常古老的版本,很长一段时间没有看到更新。 10.2B后期服务包进行了很多改进,OE11.4或11.5应该有更好的支持。