Android 15 で exificient-grammars ライブラリを使用して文法を作成しようとしています (c はコンテキストです)
Grammars g = GrammarFactory.newInstance().createGrammars(c.getAssets().open("svg.xsd"));
さらに 2 つのスキーマ xlink.xsd と namespace.xsd をインポートする svg.xsd から。これらの 2 つのファイルは svg.xsd に含まれていました (ご覧のとおり、svg.xsd のルート ディレクトリにあります)。しかし、文法を作成する代わりに、次の例外が発生します。
com.siemens.ct.exi.exceptions.EXIException: Problem occured while building XML Schema Model (XSModel)!
. [xs-warning] schema_reference.4: Failed to read schema document 'xlink.xsd', because 1) could not find the document; 2) the document could not be read; 3) the root element of the document is not <xsd:schema>.
. [xs-warning] schema_reference.4: Failed to read schema document 'namespace.xsd', because 1) could not find the document; 2) the document could not be read; 3) the root element of the document is not <xsd:schema>.
svg.xsd
import を使用するの 2 行は次のとおりです。
<xs:import namespace="http://www.w3.org/1999/xlink" schemaLocation="xlink.xsd"/>
<xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="namespace.xsd"/>
私がこれまでに試したこと:
- 私は単純に svg.xsd 内の 2 つの xsd をマージしようとしましたが、単に xsd ファイルがどのように機能するかを知らなかったということだけを理解するためです。
- までソースをたどりました
SchemaInformedGrammars.class
が、何が何であるかわかりませんsystemId
。 - (編集)ここのサポートの提案に従って(2番目の投稿)私
com.siemens.ct.exi.grammars.XSDGrammarsBuilder
は文法を作成するために使用しました:
XSDGrammarsBuilder xsd = XSDGrammarsBuilder.newInstance();
xsd.loadGrammars(c.getAssets().open("namespace.xsd"));
xsd.loadGrammars(c.getAssets().open("xlink.xsd"));
xsd.loadGrammars(c.getAssets().open("svg.xsd"));
SchemaInformedGrammars sig = xsd.toGrammars();
exiFactory.setGrammars(sig);
まったく同じエラーが発生するためだけに...
私の質問: 問題は、パーサーが他の 2 つのファイルを見つけられないことです。パーサーがそれらを見つけることができるように、何らかの方法でこれらのファイルを含める方法はありますか?