如何验证Vala中的模式

时间:2013-01-23 11:26:48

标签: xml xml-parsing xsd vala

我想将xml文件解析为Xml.Doc对象,并根据Vala中的模式文件对其进行验证。 Vala是否提供此功能?我搜索了http://valadoc.org,但找不到任何东西。

我希望在Vala中可以使用以下C函数:

  1. xmlSchemaParserCtxtPtr parser_ctxt = xmlSchemaNewDocParserCtxt(schema_doc);
  2. xmlSchemaPtr schema = xmlSchemaParse(parser_ctxt);
  3. xmlSchemaValidCtxtPtr valid_ctxt = xmlSchemaNewValidCtxt(schema);
  4. 我只能找到valadoc中提到的第三个SchemaValidCtxt,但页面实际上是空白的。这是一个有效的可用类吗?

1 个答案:

答案 0 :(得分:2)

  

我想将xml文件解析为Xml.Doc对象,并根据Vala中的模式文件对其进行验证。 Vala是否提供此功能?我搜索了http://valadoc.org,但找不到任何东西。

如果您正在寻找libxml中C函数的Vala等价物,您只需搜索libxml-2.0.vapi并查找cname即可。 Valadoc.org目前不允许您搜索C符号,但AFAIK计划使用该功能。

  

我希望在Vala中可以使用以下C函数:

     
      
  1. xmlSchemaParserCtxtPtr parser_ctxt = xmlSchemaNewDocParserCtxt(schema_doc);
  2.   
  3. xmlSchemaPtr schema = xmlSchemaParse(parser_ctxt);
  4.   
  5. xmlSchemaValidCtxtPtr valid_ctxt = xmlSchemaNewValidCtxt(schema);
  6.   

libxml-2.0 Vala绑定非常不完整,没有人愿意使用它们,因为C API非常混乱。通常最终发生的事情是有人出现并需要特定的东西,所以他们添加它并提交补丁。显然,你是第一个需要XML Schema支持的人。

xmlSchemaNewDocParserCtxt绑定为Xml.ParserCtxt.ParserCtxt.create_doc。其他两个函数目前尚未绑定,但绑定它们并不是很困难。将这样的(完全未经测试的)添加到libxml-2.0 VAPI应该可以解决这个问题:

    [Compact]
    [CCode (cname = "xmlSchema", free_function = "xmlSchemaFree", cheader_filename = "libxml/xmlschemas.h")]
    public class Schema {
        [CCode (cname = "xmlSchemaDump", instance_pos = -1)]
        public void dump (GLib.FileStream output);
    }

    [Compact]
    [CCode (cname = "xmlSchemaParserCtxt", free_function = "xmlSchemaFreeParserCtxt", cheader_filename = "libxml/xmlschemas.h")]
    public class SchemaParserCtxt {
        [CCode (cname = "xmlSchemaNewParserCtxt")]
        public SchemaParserCtxt (string URL);
        [CCode (cname = "xmlSchemaNewDocParserCtxt")]
        public SchemaParserCtxt.from_doc (Xml.Doc doc);
        [CCode (cname = "xmlSchemaNewMemParserCtxt")]
        public SchemaParserCtxt.from_buffer (uint8[] buffer);
        [CCode (cname = "xmlSchemaParse")]
        public Xml.Schema parse ();
    }

    [Compact]
    [CCode (cname = "xmlSchemaValidCtxt", free_function = "xmlSchemaFreeValidCtxt", cheader_filename = "libxml/xmlschemas.h")]
    public class SchemaValidCtxt {
        public SchemaValidCtxt (Xml.Schema schema);
    }
  

我只能找到valadoc中提到的第三个SchemaValidCtxt,但页面实际上是空白的。这是一个有效的可用类吗?

现在它只是一个空壳 - 没有绑定任何方法。幸运的是,添加绑定非常简单。