umakaparserが吐き出すJSONは以下のフィールドから成り立っています。 - meta_data - prefixes - classes - properties - inheritance_structure それぞれどのように情報を取得しているのかについて記述します。 ## meta_data `meta_data`は下記のフィールドを持ちます。 - endpoint: SPARQLエンドポイントのURL - crawl_date: クロールが終了した日時 - triples: 総トリプル数 - classes: 総クラス数 - properties: 総プロパティ数 以上の内容を、sbmのTurleファイルが下記のような構造であることを想定した上で収集します。 ``` @prefix sd: <http://www.w3.org/ns/sparql-service-description#> . @prefix xsd: <http://www.w3.org/2001/XMLSchema#> . @prefix sbm: <http://sparqlbuilder.org/2015/09/rdf-metadata-schema#> . @prefix void: <http://rdfs.org/ns/void#> . <サービスノード> a sd:Service ; sd:endpoint <http://data.allie.dbcls.jp/sparql> ; #<<< endpoint sd:defaultDataset <データセットノード> . <データセットノード> a sd:Dataset ; void:properties "33"^^xsd:long ; #<<< properties void:classes "19"^^xsd:long ; #<<< classes void:triples "150184110"^^xsd:long ; #<<< triples <データセットノード> sbm:crawlLog <クロールログノード> . <クロールログノード> a sbm:CrawlLog ; sbm:crawlEndTime "2016-11-15T22:01:49.071+09:00"^^xsd:dateTime ; #<<< crawl_date ``` ## prefixes buildに与えたSBMファイル、build-indexで与えたオントロジーファイル全てからPREFIX宣言されているものを収集します。 PREFIX宣言が存在する時は、該当するURIを短縮します。 JSONには下記のように記述されます。 ```json { "prefixes": { "xml": "http://www.w3.org/XML/1998/namespace", "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", "rdfs": "http://www.w3.org/2000/01/rdf-schema#" } } ``` ## classes `classes`は下記のようにJSONに記述されています。 ```json { "classes": { ":LongForm": { "entities": 2638336, "label": { "en": "LongForm" }, "rhs": [ [ ":frequency", null ], [ "rdf:type", "owl:Class" ], [ "rdfs:label", null ] ], "lhs": [ [ ":EachPair", ":hasLongFormOf" ] ] } } } ``` クラスのURIをkeyとしてvalueのオブジェクトは以下です。 - entities: そのクラスのインスタンスの数です。 - label: そのクラスについて、オントロジーから収集したrdfs:labelの情報を元に言語タグをkey、ラベルをvalueとするオブジェクトです - subClassOf: そのクラスについて、オントロジーから収集したrdfs:subClassOfの情報を元に親クラスのURIをArrayとしたものです - rhs: そのクラスが主語となるトリプルがあるとき、述語と目的語となるクラスの一覧です。propertiesで紹介します。 - lhs: そのクラスが目的語となるトリプルがあるとき、主語と述語となるクラスの一覧です。propertiesで紹介します。 以上の内容を、sbmのTurleファイルが下記のような構造であることを想定した上で収集します。 ``` @prefix sd: <http://www.w3.org/ns/sparql-service-description#> . @prefix xsd: <http://www.w3.org/2001/XMLSchema#> . @prefix sbm: <http://sparqlbuilder.org/2015/09/rdf-metadata-schema#> . @prefix void: <http://rdfs.org/ns/void#> . <サービスノード> a sd:Service ; sd:endpoint <http://data.allie.dbcls.jp/sparql> ; #<<< endpoint sd:defaultDataset <データセットノード> . <データセットノード> void:classPartition <クラスパーティションノード> <クラスパーティションノード> a void:Dataset ; void:class <http://purl.org/allie/ontology/201108#LongForm> ; # <<< クラスのURI void:entities "2638336"^^xsd:long . # <<< entities ``` ## properties `properties`は以下のように記述されます。 ```json { "properties": [ { "uri": ":frequency", "triples": 8468287, "class_relations": [ { "triples": 3109687, "object_class": "xsd:string", "object_datatype": null, "subject_class": ":EachPair" }, { "triples": 2638336, "object_class": "xsd:string", "object_datatype": null, "subject_class": ":LongForm" }, { "triples": 743574, "object_class": "xsd:string", "object_datatype": null, "subject_class": ":ShortForm" } ] } ] } ``` `properties`は以下のフィールドを持つオブジェクトのArrayで構成されています。 - `uri`は述語のURIです。 - `triples`はこの述語が含まれるtripleの個数です。 - `class_relations`は述語が取っている主語や目的語ごとに詳細化したものです。 - `subject_class`は主語となるクラスのURIです。 - `object_class`は目的語となるクラスのURIです。 - `object_datatype`は目的語となるものがリテラルの時にその型のURIです。 - `triples`はその主語と目的語の組み合わせを満たすtripleの個数です。 以上の内容を、sbmのTurleファイルが下記のような構造であることを想定した上で収集します。 ``` @prefix sd: <http://www.w3.org/ns/sparql-service-description#> . @prefix xsd: <http://www.w3.org/2001/XMLSchema#> . @prefix sbm: <http://sparqlbuilder.org/2015/09/rdf-metadata-schema#> . @prefix void: <http://rdfs.org/ns/void#> . <サービスノード> a sd:Service ; sd:endpoint <http://data.allie.dbcls.jp/sparql> sd:defaultDataset <データセットノード> . <データセットノード> a sd:Dataset ; void:propertyPartition <プロパティパーティションノード> . <プロパティパーティションノード> a void:Dataset ; void:property <http://purl.org/allie/ontology/201108#frequency> ; # <<< properties[].uri void:triples "8468287"^^xsd:long ; # <<< properties[].triples <プロパティパーティションノード> sbm:classRelation <クラスリレーションノード1> . <クラスリレーションノード1> a sbm:ClassRelation ; sbm:subjectClass <http://purl.org/allie/ontology/201108#EachPair> ; # <<< properties[].class_relations[].uri sbm:objectDatatype xsd:string . # <<< properties[].class_relations[].object_datatype void:triples "3109687"^^xsd:long ; # <<< properties[].class_relations[].triples <プロパティパーティションノード> sbm:classRelation <クラスリレーションノード2> . <クラスリレーションノード2> a sbm:ClassRelation ; sbm:subjectClass <http://purl.org/allie/ontology/201108#LongForm> ; # <<< properties[].class_relations[].uri sbm:objectClass <http://purl.org/allie/ontology/201108#ResearchArea> . # <<< properties[].class_relations[].object_class void:triples "2638336"^^xsd:long ; # <<< properties[].class_relations[].triples ``` ## inheritance_structure `inheritance_structure`は`build-index`に与えたオントロジーから`rdfs:subClassOf`の情報を使って木構造を形成します。 以下のように記述されます。 ```json { "inheritance_structure": { "uri": ":Pair", "children": [ { "uri": ":PairCluster" }, { "uri": ":EachPair" } ] } } ```