を使用してクラス式に文字列を変換しながら、私はManchesterOWLSyntaxParser
以降のフォームを使用してOWLClassExpression
に[マンチェスターOWL構文である] String
を変換する方法を作成し、そのために、オントロジーに新しい公理を追加します新しいOWLAxiom
とオントロジーに追加します。OWLAPI:「をParserException」ManchesterOWLSyntaxParser
<?xml version="1.0"?>
<!DOCTYPE rdf:RDF [
<!ENTITY owl "http://www.w3.org/2002/07/owl#" >
<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#" >
<!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#" >
<!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#" >
]>
<rdf:RDF xmlns="http://www.semanticweb.org/empty#"
xml:base="http://www.semanticweb.org/empty"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
<owl:Ontology rdf:about="http://www.semanticweb.org/empty"/>
<!--
///////////////////////////////////////////////////////////////////////////////////////
//
// Data properties
//
///////////////////////////////////////////////////////////////////////////////////////
-->
<!-- http://www.semanticweb.org/empty#name -->
<owl:DatatypeProperty rdf:about="http://www.semanticweb.org/empty#name"/>
<!--
///////////////////////////////////////////////////////////////////////////////////////
//
// Classes
//
///////////////////////////////////////////////////////////////////////////////////////
-->
<!-- http://www.semanticweb.org/empty#A -->
<owl:Class rdf:about="http://www.semanticweb.org/empty#A"/>
</rdf:RDF>
<!-- Generated by the OWL API (version 3.5.1) http://owlapi.sourceforge.net -->
マイJAVAコードは次のとおりです。 - - :
// some code above to form OWLManager and Ontology
System.out.println(convertStringToClassExpression("name max 1 owl:real"));
private OWLClassExpression convertStringToClassExpression(String expression) {
ManchesterOWLSyntaxParser parser = OWLManager.createManchesterParser();
parser.setStringToParse(expression);
parser.setDefaultOntology(owlOntology); // my ontology
ShortFormEntityChecker checker = new ShortFormEntityChecker(getShortFormProvider());
parser.setOWLEntityChecker(checker);
return parser.parseClassExpression();
}
private BidirectionalShortFormProvider getShortFormProvider() {
Set<OWLOntology> ontologies = owlManager.getOntologies(); // my OWLOntologyManager
ShortFormProvider sfp = new ManchesterOWLSyntaxPrefixNameShortFormProvider(
owlManager.getOntologyFormat(owlOntology));
BidirectionalShortFormProvider shortFormProvider = new BidirectionalShortFormProviderAdapter(
ontologies, sfp);
return shortFormProvider;
}
しかし、私は次の例外(org.semanticweb.owlapi.manchestersyntax.renderer.ParserException
)取得しています: -
Exception in thread "main" org.semanticweb.owlapi.manchestersyntax.renderer.ParserException: Encountered owl:real at line 1 column 12. Expected one of:
Datatype name
not
{
at org.semanticweb.owlapi.manchestersyntax.parser.ManchesterOWLSyntaxParserImpl$ExceptionBuilder.build(ManchesterOWLSyntaxParserImpl.java:2441)
at org.semanticweb.owlapi.manchestersyntax.parser.ManchesterOWLSyntaxParserImpl.parseDataRangePrimary(ManchesterOWLSyntaxParserImpl.java:813)
at org.semanticweb.owlapi.manchestersyntax.parser.ManchesterOWLSyntaxParserImpl.parseDataUnionOf(ManchesterOWLSyntaxParserImpl.java:756)
at org.semanticweb.owlapi.manchestersyntax.parser.ManchesterOWLSyntaxParserImpl.parseDataIntersectionOf(ManchesterOWLSyntaxParserImpl.java:737)
at org.semanticweb.owlapi.manchestersyntax.parser.ManchesterOWLSyntaxParserImpl.parseDataRange(ManchesterOWLSyntaxParserImpl.java:729)
at org.semanticweb.owlapi.manchestersyntax.parser.ManchesterOWLSyntaxParserImpl.parseDataRestriction(ManchesterOWLSyntaxParserImpl.java:695)
at org.semanticweb.owlapi.manchestersyntax.parser.ManchesterOWLSyntaxParserImpl.parseNonNaryClassExpression(ManchesterOWLSyntaxParserImpl.java:584)
at org.semanticweb.owlapi.manchestersyntax.parser.ManchesterOWLSyntaxParserImpl.parseIntersection(ManchesterOWLSyntaxParserImpl.java:488)
at org.semanticweb.owlapi.manchestersyntax.parser.ManchesterOWLSyntaxParserImpl.parseUnion(ManchesterOWLSyntaxParserImpl.java:511)
at org.semanticweb.owlapi.manchestersyntax.parser.ManchesterOWLSyntaxParserImpl.parseClassExpression(ManchesterOWLSyntaxParserImpl.java:470)
at OWLAPI.convertStringToClassExpression(OWLAPI.java:29)
は以下は、私のオントロジーです
しかし、文字列をname max 1 owl:real
からname max 1 xsd:string
に変更すると、コードから例外がスローされません。どうしたの ?それを避ける方法は?
'ManchesterWLSyntaxParserImpl'(現在)は、OWL 2のデータ型' owl:real'と 'owl:rational'を処理しません。 'float'または' xsd:double'をユースケースのオプションとして使用しています(ただし、値のスペースは定義によってペアごとに分かれています)。 – dhke
それでプロテスタがこのケースをどう扱うのか? ClassExpressionとして 'name max 1 owl:real'を任意の公理に追加できます。私は何かを忘れてしまったか(余分な処理、間違った実装を意味する)? – SuhasD
どのバージョンのOWLAPIを試しましたか?最新のProtègéが4.2.5で、あなたのオントロジーで3.5.1がマークされていますが、アップストリームはすでに5.0.1になっています。 4.0.2に 'owl:real'のサポートがないことを確認しました。 – dhke