1

xmlファイルをXml.Docオブジェクトに解析し、Valaのスキーマファイルに対して検証したいと思います。Valaはこの機能を提供しますか?http://valadoc.orgを検索しましたが、何も見つかりません。

次のC関数がValaで使用できると思います。

  1. xmlSchemaParserCtxtPtr parser_ctxt = xmlSchemaNewDocParserCtxt(schema_doc);
  2. xmlSchemaPtrスキーマ=xmlSchemaParse(parser_ctxt);
  3. xmlSchemaValidCtxtPtr valid_ctxt = xmlSchemaNewValidCtxt(schema);

valadocで言及されている3番目のSchemaValidCtxtしか見つかりませんが、ページは事実上空白です。これは有効な使用可能なクラスですか?

4

1 に答える 1

2

xml ファイルを Xml.Doc オブジェクトに解析し、Vala のスキーマ ファイルに対して検証したいと考えています。Vala はこの機能を提供していますか? http://valadoc.orgを検索しましたが、何も見つかりません。

libxml で C 関数に相当する Vala を探している場合は、libxml-2.0.vapiを検索して cname を探すだけです。Valadoc.org では現在、C シンボルの検索を許可していませんが、私の知る限り、その機能は計画されています。

次の C 関数が Vala で利用できると期待しています。

  1. xmlSchemaParserCtxtPtr parser_ctxt = xmlSchemaNewDocParserCtxt(schema_doc);
  2. xmlSchemaPtr スキーマ = xmlSchemaParse(parser_ctxt);
  3. xmlSchemaValidCtxtPtr valid_ctxt = xmlSchemaNewValidCtxt(スキーマ);

libxml-2.0 の Vala バインディングはかなり不完全であり、C API は本当に面倒なので、誰もそれらに取り組みたがりません。通常、最終的に起こるのは誰かがやって来て、何か特定のものを必要とするので、それを追加してパッチを提出することです。どうやらあなたは、XML スキーマのサポートを必要とする最初の人です。

xmlSchemaNewDocParserCtxt は Xml.ParserCtxt.ParserCtxt.create_doc としてバインドされます。他の 2 つの関数は現在バインドされていませんが、バインドするのはそれほど難しくありません。次のようなもの (完全にテストされていません) を 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 で言及されている 3 つ目の SchemaValidCtxt しか見つかりませんが、ページは実質的に空白です。これは有効な使用可能なクラスですか?

現時点では空のシェルです。どのメソッドもバインドされていません。幸いなことに、バインディングの追加は非常に簡単です。

于 2013-01-25T00:11:24.920 に答える