尝试从 DTD 模式创建动态临时 table(数据集)? [OE10.1C]

Trying to create a dynamic temp table (dataset) from a DTD Schema? [OE10.1C]

我正在尝试从外部 DTD 文件创建动态临时文件 table 和数据集。我试图简化一些 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   
---------------------------

我认为 Progress 正在寻找 XSD 文件 -- 而不是 DTD。查看您的 link 并将其与我使用的工作 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 service pack做了很多改进,OE11.4或11.5应该会有更好的支持。