4

Jenaフレームワークを使用してRDFファイルを操作していますが、それぞれのRDFSchemaでRDFを検証する方法が見つかりません。私は以下のこの方法を試しています:

Model mod1 = new ModelMem();
Model modSchema = new ModelMem();
String baseURI = "http://iec.ch/TC57/2007/network";

String rdfPath = "file:D:\\modelo.rdf";
InputStream model = FileManager.get().open(rdfPath);

String rdfPathSchema = "file:D:\\Schema.rdf";
InputStream modelSchema = FileManager.get().open(rdfPathSchema);

mod1.read(model, baseURI, "RDF/XML-ABBREV");
modSchema.read(modelSchema,baseURI,  "RDF/XML-ABBREV");
InfModel infmodel = ModelFactory.createRDFSModel(mod1, modSchema);
ValidityReport validity = infmodel.validate();
return validity.isValid();

ただし、常にtrueを返します。

4

3 に答える 3

1

試したすべての入力が有効であるという理由だけで、常にtrueが返されるとは限りませんか?スキーマに関して明示的に無効な入力を作成してテストしましたか?

RDFスキーマはXMLスキーマと同じように厳密なスキーマではありませんが、RDFをチェックするためのもう1つのJenaベースのツールであるJena Eyeballを見てみてください。ただし、希望どおりに機能するかどうかはわかりません。

それでも問題が解決しない場合は、Jenaメーリングリスト(users@jena.apache.org)で質問してみてください。

編集

スキーマと矛盾する方法で何かを使用した場合にのみ、検証がfalseを返すことに注意してください。無効と見なされる可能性のあるデータを作成するタイプミスやその他のユーザーエラーは、RDFスキーマに関して完全に一貫している可能性があります。

たとえば、次のような単純なRDFスキーマがあるとします。

:ValidType a rdfs:Class .

:property a rdf:Property ;
          rdfs:domain :ValidType .

したがって、このスキーマは、単一のクラスと、そのクラスのドメインを持つプロパティがあることを示しています。

次に、ユーザーはタイプミスを行い、データに次の情報を含めます。

:subj a :InvalidType .

RDFには開世界仮説があるため、これ自体に矛盾はありません。何かがRDFスキーマでカバーされていないタイプを持っていると述べても、検証が失敗することはありません。検証の観点からは、それは単に偽の情報です。

:subjただし、ユーザーが次のように定義済みのプロパティを使用したと述べた場合:

:subj a :InvalidType ;
      :property "value" .

データがスキーマと矛盾するため、検証はfalseを返すはずです。:propertyドメインのみがあります:ValidTypeが、タイプのリソースで使用されたため、:InvalidTypeこれは矛盾しており、検証は失敗するはずです。

于 2012-10-19T18:01:40.477 に答える
1

厳密には、JenaまたはRDFSを介したソリューションではありませんが、PelletのICV機能(Stardogに移植され、ここで説明)に関する情報が役立つ場合があります。しかし、ロブが言うように、それは実際にはオープンワールドとクローズドワールドの関係に帰着します。それは少しトリッキーになります。

于 2012-10-22T00:17:43.373 に答える
1

RDFスキーマを使用してRDFを検証するためのソリューションを見つけました。CIMValidationと呼ばれるツールが存在します。これをアプリケーションJavaで使用できます。ビルドパスに.jarを追加し、RDFSValidatorクラスを使用するだけです。すべての答えをありがとう。

于 2012-10-26T17:19:42.650 に答える