【问题标题】:how to validate against a schema in Vala如何验证 Vala 中的模式
【发布时间】:2013-01-23 11:26:47
【问题描述】:

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

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

  1. xmlSchemaParserCtxtPtr parser_ctxt = xmlSchemaNewDocParserCtxt(schema_doc);
  2. xmlSchemaPtr 架构 = xmlSchemaParse(parser_ctxt);
  3. xmlSchemaValidCtxtPtr valid_ctxt = xmlSchemaNewValidCtxt(schema);

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

【问题讨论】:

    标签: xml xml-parsing xsd vala


    【解决方案1】:

    我想将一个 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. xmlSchemaPtr 架构 = xmlSchemaParse(parser_ctxt);
    3. xmlSchemaValidCtxtPtr valid_ctxt = xmlSchemaNewValidCtxt(schema);

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

    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,但页面几乎是空白的。这是一个有效的可用类吗?

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-03
      • 1970-01-01
      • 2020-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-03
      相关资源
      最近更新 更多