xml ファイルを Xml.Doc オブジェクトに解析し、Vala のスキーマ ファイルに対して検証したいと考えています。Vala はこの機能を提供していますか? http://valadoc.orgを検索しましたが、何も見つかりません。
libxml で C 関数に相当する Vala を探している場合は、libxml-2.0.vapiを検索して cname を探すだけです。Valadoc.org では現在、C シンボルの検索を許可していませんが、私の知る限り、その機能は計画されています。
次の C 関数が Vala で利用できると期待しています。
- xmlSchemaParserCtxtPtr parser_ctxt = xmlSchemaNewDocParserCtxt(schema_doc);
- xmlSchemaPtr スキーマ = xmlSchemaParse(parser_ctxt);
- 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 しか見つかりませんが、ページは実質的に空白です。これは有効な使用可能なクラスですか?
現時点では空のシェルです。どのメソッドもバインドされていません。幸いなことに、バインディングの追加は非常に簡単です。