ここで定義されているスキーマからエンティティ (Java 言語の POJO) を生成するコード ジェネレーターを作成していますhttp://schema.rdfs.org/all.ttl。Jena を使用して ttl ファイルを解析し、それらを生成するために必要なメタ データを取得しています。
Jena はファイルを正常に解析しますが、何らかの理由で特定のエンティティ (Person など) のすべての属性をリストしていません。何か間違ったことをしているのか、間違った API を使用しているのかなど、よくわかりません。シナリオを再現するコード サンプルを次に示します。
public class PersonParser {
public static void main(String[] args) {
OntModel model = ModelFactory.createOntologyModel();
URL url = Thread.currentThread().getContextClassLoader().getResource("schema_org.ttl");
model.read(url.toString(), "TURTLE");
OntClass ontclass = model.getOntClass("http://schema.org/Person");
Iterator<OntProperty> props = ontclass.listDeclaredProperties();
while (props.hasNext()) {
OntProperty p = props.next();
System.out.println("p:" + p.getLocalName());
}
}
}
基本的に、Person という名前のクラスを 1 つだけ探して、そのすべてのプロパティをリストしようとすると、次のようになります。
p:alternateName
p:deathDate
p:alumniOf
p:sameAs
p:url
p:additionalName
p:homeLocation
p:description
p:nationality
p:sibling
p:follows
p:siblings
p:colleagues
p:memberOf
p:knows
p:name
p:gender
p:birthDate
p:children
p:familyName
p:jobTitle
p:workLocation
p:parents
p:affiliation
p:givenName
p:honorificPrefix
p:parent
p:colleague
p:additionalType
p:honorificSuffix
p:image
p:worksFor
p:relatedTo
p:spouse
p:performerIn
しかし、 http://schema.org/Personを見ると、一覧にないプロパティがたくさんあります (たとえば、address
)。http://schema.rdfs.org/all.ttlschema:address
での宣言は次のとおりです。
schema:address a rdf:Property;
rdfs:label "Address"@en;
rdfs:comment "Physical address of the item."@en;
rdfs:domain [ a owl:Class; owl:unionOf (schema:Person schema:Place schema:Organization) ];
rdfs:range schema:PostalAddress;
rdfs:isDefinedBy <http://schema.org/Person>;
rdfs:isDefinedBy <http://schema.org/Place>;
rdfs:isDefinedBy <http://schema.org/Organization>;
.
誰かがこれに出くわしましたか?スキーマを解析するために別の Jena インターフェイスを使用する必要がありますか?