首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PMML 4.4 xml解析异常

PMML 4.4 xml解析异常
EN

Stack Overflow用户
提问于 2022-09-21 07:05:36
回答 2查看 39关注 0票数 0

嗨,我的项目需求之一是手动创建一个PMML。直到4.2版本,它是好的,现在我试着做同样的使用4.4版本,但它给了我以下错误。

由: javax.xml.bind.UnmarshalException:意外元素(uri:"",local:"PMML")引起。预期元素是{https://www.dmg.org/PMML-4\_4}AR.

这是我的示例代码

代码语言:javascript
复制
String pmmlString="<?xml version=\"1.0\" encoding=\"UTF-8\"?><PMML xmlns=\"http://www.dmg.org/PMML-4_4\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" version=\"4.4\"></PMML>";
    PMML pmml = null;
    XMLStreamReader xsr = null;
    try {
        JAXBContext jc = JAXBContext.newInstance(PMML.class);
        Unmarshaller u = jc.createUnmarshaller();
        XMLInputFactory xif = XMLInputFactory.newInstance();
        xif.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, false);
        xif.setProperty(XMLInputFactory.IS_COALESCING, false);
        xif.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, false);
        xsr = xif.createXMLStreamReader(new ByteArrayInputStream(pmmlString.getBytes()));

        pmml = (PMML) u.unmarshal(xsr);

    } catch(Exception e){
        e.printStackTrace();
    }finally {
        if (xsr != null) {
            try {
                xsr.close();
            } catch (Exception e) {

            }
        }
    }

Im遵循与https://dmg.org/pmml/v4-4/GeneralStructure.html中提到的完全相同的结构

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-09-22 13:28:45

当我将xsd转换为java时,jaxb创建了包-info.java,如下所示:@javax.xml.bind.annotation.XmlSchema(namespace = "https://www.dmg.org/PMML-4_4", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED) package com.fico.carbon.pmml;

一旦删除了上面的注释,它就开始工作了。

票数 0
EN

Stack Overflow用户

发布于 2022-10-11 13:13:22

简而言之,PMML字符串引用http://www.dmg.org/PMML-4_4 XML命名空间URI (HTTP协议),而PMML文件引用https://www.dmg.org/PMML-4_4 one (HTTPS协议)。这两个XML名称空间URI是不同的,因此您的解析器正确地认为PMML字符串不符合PMML。

DMG.org似乎把他们的网站从HTTP迁移到HTTPS,有时是在2022年初夏。他们一定是通过在所有站点内容上执行强制字符串替换(包括附件文件(如PMML文件)来做到这一点的。

显然,这个字符串替换执行得不正确,因为更改这样的XML命名空间URI前缀是不正确的。该bug已被DMG.org报告为第274期,但没有任何反应/反馈。

TLDR: PMML字符串是正确的。您需要手动编辑新下载的PMML文件,并将PMML命名空间URI从HTTPS更改为HTTP。然后它就会起作用(就像它工作了很多年一样)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73796608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档