读书人

RDF资料的解析

发布时间: 2012-07-27 11:03:01 作者: rapoo

RDF文件的解析

开发过程中的XML解析有很多种方式

一次偶然的机会,碰到RDF格式的,和传统的xml有点区别,可能有他自己的独特之处

?

普通的xml解析可能无效 ,在网上搜索了下 ,建议用jena解析

可以在主页下载:http://jena.sourceforge.net/? 当前版本为 jena-2.6.4

?

先看下RDF的大致格式

<?xml version="1.0"?><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"xmlns:prf="http://www.wapforum.org/profiles/UAPROF/ccppschema-20010430#"><rdf:Description rdf:about="Nokia3330"><prf:component><rdf:Description rdf:about="HardwarePlatform"><rdf:typerdf:resource="http://www.wapforum.org/profiles/UAPROF/ccppschema-20010430#HardwarePlatform" /><prf:Keyboard>PhoneKeypad</prf:Keyboard><prf:NumberOfSoftKeys>1</prf:NumberOfSoftKeys><prf:ScreenSize>84x30</prf:ScreenSize><prf:ScreenSizeChar>10x3</prf:ScreenSizeChar><prf:StandardFontProportional>Yes</prf:StandardFontProportional><prf:Vendor>Nokia</prf:Vendor><prf:Model>3330</prf:Model><prf:TextInputCapable>Yes</prf:TextInputCapable></rdf:Description></prf:component></rdf:Description></rdf:RDF>

?

?

?

解析部分代码

?

/**     *      * 解析RDF 文件     *      * @param inputFile     * @author     * @date 2011-9-1 上午09:17:16     */    private void parseRdfFile(File inputFile)    {        try        {            Model model = ModelFactory.createDefaultModel();            // use the FileManager to find the input file            InputStream in = new FileInputStream(inputFile);            if (in == null)            {                throw new IllegalArgumentException("File:  not found");            }            model.read(new InputStreamReader(in), "");            StmtIterator stmtIt = model.listStatements();            String key1 = "";            String key2 = "";            String value = "";            while (stmtIt.hasNext())            {                Statement stmt = stmtIt.nextStatement();                // resource                key1 = stmt.getSubject().getURI();                if (null == key1)                {                    continue;                }                // Property                key2 = stmt.getPredicate().getLocalName();                // RDFNode                if (stmt.getBag().size() > 0)                {                    value = getBagStr(stmt.getBag());                } else                {                    value = stmt.getObject().toString();                }                // key1                logger.trace("resource:" + key1);                // key2                logger.trace("Property = " + key2);                // value                logger.trace("RDFNode/bag = " + value);                           }        } catch (Exception e)        {            logger.error("parseRdfFile Failed", e);        }    }    /**     *      * 获取bag 的值     *      * @param bags     * @return     * @author     * @date 2011-9-1 上午07:26:51     */    private String getBagStr(Bag bags)    {        if (null == bags || bags.size() == 0)        {            return "";        }        StringBuilder sb = new StringBuilder();        NodeIterator bagIt = bags.iterator();        if (bagIt.hasNext())        {            while (bagIt.hasNext())            {                sb.append(bagIt.next());                sb.append(MARK_SEP);            }        }        return sb.substring(0, sb.length() - 1 - MARK_SEP.length());    }

?

读书人网 >移动开发

热点推荐