0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Supply Chain Reference Ontology のサンプルデータを data.world でクエリする方法

Last updated at Posted at 2025-03-25

概要

本記事では、Supply Chain Reference Ontology (SCRO) のサンプルデータとして公開されている SCRO_Ford.ttl に対し、data.world 上で SPARQL クエリを実行する方法を紹介します。SCRO はサプライチェーン管理におけるオントロジーであり、サンプルデータである SCRO_Ford.ttl ファイルが下記のように公開されています。本記事では、このデータに対して SPARQL を用いてどのようにクエリを実行できるかを解説します。なお、紹介している SPARQL は動作確認済みですが、最適なクエリである保証はない点に注意してください。

image.png

出所:ontology/supplychain/data/SCRO_Ford.ttl at master · iofoundry/ontology

応用的なクエリとしては、「MODELING A SUPPLY CHAIN REFERENCE ONTOLOGY BASED ON A TOP-LEVEL ONTOLOGY」に記載されている、ビジネス上重要な質問に対応するクエリを例示します。ただし、サンプルデータがこれらの質問すべてに答えられる構造にはなっていないため、実行方法が確立できたクエリのみを紹介しています。

  • What are the outputs of this supplier in this supply network?
  • What types of information does this supplier receive?
  • What is the most connected supplier in this supply network?
  • What are the first-tier/second-tier suppliers in this network?
  • Which supplier provides raw materials in this network?
  • What is the path followed by a certain component in this network?

出所:MODELING A SUPPLY CHAIN REFERENCE ONTOLOGY BASED ON A TOP-LEVEL ONTOLOGY

なお、data.world については下記の記事でも紹介しています。

サンプルデータであるSCRO_Ford.ttlファイルについて

Supply Chain Reference Ontology (SCRO) の README で、サンプルデータとして紹介されています。

Example RDF Dataset

This dataset represents a hypothetical supply chain as depicted in [this image](https://github.com/iofoundry/ontology/blob/master/supplychain/Documentation & Resources/Terms-Patterns-Modules/Ford Supply Chain.md). The RDF dataset demonstrates how the class "Supply Chain Relationship' is used to represent the strucrue of a supply chain.

image.png

出所:ontology/supplychain/README.md at master · iofoundry/ontology

上記のリンクには誤字があるため、正確には下記 URL からアクセスしてください。

データ構造の概要は画像として公開されています。Ford Motor Company を中心としたサプライチェーンが表現されており、素材メーカーから部品メーカー、システムサプライヤーを経て最終組立の Ford へ部品やモジュールが集約されます。企業名と部品が矢印で結ばれており、矢印の上には納入部材や供給関係の番号が記載されています。

image.png

出所:FORD-SupplyChain.png

事前準備

data.world にてプロジェクトを作成

下記の記事を参考にプロジェクトを作成してください。

data.world に SCRO のサンプルデータであるSCRO_Ford.ttlファイルをアップロード

左上にある + Add -> Project file を選択します。

image.png

Sync from URL を選択します。

image.png

Source URLSCRO_Ford.ttl ファイルの GitHub URL を入力し、Continue を選択します。

https://github.com/iofoundry/ontology/blob/master/supplychain/data/SCRO_Ford.ttl

image.png

File nameSCRO_Ford.ttl になっていることを確認し、Done を選択します。

image.png

サンプルデータがアップロードされていることを確認します。

image.png

SPARQL Query の追加

+ Add -> SPARQL Query を選択します。

image.png

SPARQL Query が表示されることを確認します。

image.png

1. 基本的なクエリ

1-1. 組織の一覧を表示

PREFIX iof-core: <https://spec.industrialontologies.org/ontology/core/Core/>
PREFIX iof-scro: <https://spec.industrialontologies.org/ontology/supplychain/SupplyChain/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX obo: <http://purl.obolibrary.org/obo/>

SELECT ?org ?label ?properName ?naicsCode ?address
WHERE {
  ?org a iof-core:BusinessOrganization ;
       rdfs:label ?label .  
  OPTIONAL {
    ?org iof-core:designatedBy ?nameResource .
    ?nameResource a iof-scro:ProperName ;
                  iof-scro:hasTextValue ?properName .
  }
  OPTIONAL {
    ?org iof-core:designatedBy ?naicsResource .
    ?naicsResource a iof-scro:NAICSCode ;
                   iof-scro:hasTextValue ?naicsCode .
  }
  OPTIONAL {
    ?org obo:BFO_0000082 ?location .
    ?location iof-core:designatedBy ?addrResource .
    ?addrResource iof-scro:hasTextValue ?address .
  }
}
ORDER BY ?org

image.png

1-2. 部材の一覧を表示

PREFIX iof-scro: <https://spec.industrialontologies.org/ontology/supplychain/SupplyChain/>
PREFIX iof-core: <https://spec.industrialontologies.org/ontology/core/Core/>
PREFIX obo: <http://purl.obolibrary.org/obo/>

SELECT ?contract ?partNumber ?modelName  
WHERE {
  ?contract a iof-scro:Contract ;
            obo:BFO_0000110 ?prodPart, ?prodModel .
  
  ?prodPart a iof-scro:PartNumber ;
            iof-scro:hasTextValue ?partNumber .
  
  ?prodModel a iof-scro:MaterialArtifactModelName ;
             iof-scro:hasTextValue ?modelName .
}

image.png

1-3. 契約(Contract)関連のデータを表示

PREFIX iof-scro: <https://spec.industrialontologies.org/ontology/supplychain/SupplyChain/>
PREFIX iof-core: <https://spec.industrialontologies.org/ontology/core/Core/>
PREFIX obo: <http://purl.obolibrary.org/obo/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

SELECT 
  ?contract
  ?relationship 
  ?prodTextModel 
  ?supplierName ?buyerName
WHERE {
  ?contract a iof-scro:Contract ;
            iof-core:prescribes ?relationship .
  
  OPTIONAL {
    ?contract obo:BFO_0000110 ?part .
    ?part a iof-scro:PartNumber ;
          iof-scro:hasTextValue ?prodTextPart .
  }
  OPTIONAL {
    ?contract obo:BFO_0000110 ?model .
    ?model a iof-scro:MaterialArtifactModelName ;
           iof-scro:hasTextValue ?prodTextModel .
  }
  OPTIONAL {
    ?relationship obo:BFO_0000195 ?supplierRole .
    ?supplierRole a iof-core:SupplierRole ;
                  iof-core:roleOf ?supplier .
    ?supplier iof-core:designatedBy ?supplierNameNode .
    ?supplierNameNode a iof-scro:ProperName ;
                      iof-scro:hasTextValue ?supplierName .
  }
  OPTIONAL {
    ?relationship obo:BFO_0000195 ?buyerRole .
    ?buyerRole a iof-core:BuyerRole ;
               iof-core:roleOf ?buyer .
    ?buyer iof-core:designatedBy ?buyerNameNode .
    ?buyerNameNode a iof-scro:ProperName ;
                   iof-scro:hasTextValue ?buyerName .
  }
}
ORDER BY ?contract

image.png

1-4. 供給関係(SupplyRelationship)のデータを表示

PREFIX iof-scro: <https://spec.industrialontologies.org/ontology/supplychain/SupplyChain/>
PREFIX iof-core: <https://spec.industrialontologies.org/ontology/core/Core/>
PREFIX obo: <http://purl.obolibrary.org/obo/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

SELECT ?supplyRel ?buyer ?buyerName ?supplier ?supplierName 
WHERE {
  ?supplyRel a iof-scro:SupplyRelationship ;
             rdfs:label ?relLabel .
  
  # 供給者の役割から対象組織と正式名称を取得
  ?supplyRel obo:BFO_0000195 ?supplierRole .
  ?supplierRole a iof-core:SupplierRole ;
                iof-core:roleOf ?supplier .
  ?supplier iof-core:designatedBy ?supplierNameNode .
  ?supplierNameNode a iof-scro:ProperName ;
                    iof-scro:hasTextValue ?supplierName .
  
  # 購入者の役割から対象組織と正式名称を取得
  ?supplyRel obo:BFO_0000195 ?buyerRole .
  ?buyerRole a iof-core:BuyerRole ;
             iof-core:roleOf ?buyer .
  ?buyer iof-core:designatedBy ?buyerNameNode .
  ?buyerNameNode a iof-scro:ProperName ;
                 iof-scro:hasTextValue ?buyerName .
}
ORDER BY ?supplyRel

image.png

2. 応用的なクエリ

2-1. What are the outputs of this supplier in this supply network?

サプライチェーン上であるサプライヤーが提供する製品(部材)を抽出するクエリが考えられます。たとえば ZF North Americaiof-scro:org-0006 )が提供している部品を調べると、Transmission を特定できれば目的を達成できます。

image.png

出所:FORD-SupplyChain.png

下記のクエリを実行すると、ZF North America が提供している Transmission T4 を含む情報を取得できます。

PREFIX iof-scro: <https://spec.industrialontologies.org/ontology/supplychain/SupplyChain/>
PREFIX iof-core: <https://spec.industrialontologies.org/ontology/core/Core/>
PREFIX obo: <http://purl.obolibrary.org/obo/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

SELECT ?supplierName ?modelName  ?buyerName
WHERE {
  # 指定したサプライヤー(例: iof-scro:org-0006)に関連するサプライヤーロールを取得
  ?supplierRole a iof-core:SupplierRole ;
                iof-core:roleOf iof-scro:org-0006 .
  
  # 同一の供給関係内で、サプライヤーロールとバイヤーロールを取得
  ?supplyRel obo:BFO_0000195 ?supplierRole ;
             obo:BFO_0000195 ?buyerRole .
  
  # 供給関係を規定する契約から、製品情報(部品番号、モデル名)を取得
  ?contract a iof-scro:Contract ;
            iof-core:prescribes ?supplyRel ;
            obo:BFO_0000110 ?prodPart, ?prodModel .
  
  # 部品番号の抽出
  ?prodPart a iof-scro:PartNumber ;
            iof-scro:hasTextValue ?partNumber .
  
  # 製品モデル名(製品名)の抽出
  ?prodModel a iof-scro:MaterialArtifactModelName ;
             iof-scro:hasTextValue ?modelName .
  
  # サプライヤー組織の名称を取得
  ?supplierRole iof-core:roleOf ?supplierOrg .
  ?supplierOrg iof-core:designatedBy ?supplierNameRes .
  ?supplierNameRes iof-scro:hasTextValue ?supplierName .
  ?supplierNameRes a iof-scro:ProperName .
  
  # バイヤー組織の名称を取得
  ?buyerRole a iof-core:BuyerRole ;
             iof-core:roleOf ?buyerOrg .
  ?buyerOrg iof-core:designatedBy ?buyerNameRes .
  ?buyerNameRes iof-scro:hasTextValue ?buyerName .
  ?buyerNameRes a iof-scro:ProperName .
}

image.png

2-2. What are the first-tier/second-tier suppliers in this network?

ある組織に直接納品しているサプライヤーを first-tier とし、そのサプライヤーにさらに納品している組織を second-tier と定義できます。Ford を基準とすると、3 社が first-tier、4 社が second-tier にあたります。

image.png

出所:FORD-SupplyChain.png

下記のクエリで、Ford の first-tier および second-tier サプライヤーを抽出できます。

PREFIX iof-scro: <https://spec.industrialontologies.org/ontology/supplychain/SupplyChain/>
PREFIX iof-core: <https://spec.industrialontologies.org/ontology/core/Core/>
PREFIX obo: <http://purl.obolibrary.org/obo/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

SELECT DISTINCT ?baseOrgName ?supplier ?supplierName ?tier
WHERE {
  # ベース組織 (Ford Motor Company) の名称を取得
  iof-scro:org-0001 rdfs:label ?baseOrgName .
  
  {
    # ファーストティア(一次)サプライヤー: Fordに直接供給している企業
    ?supplyRel a iof-scro:SupplyRelationship ;
               obo:BFO_0000195 ?roleA, ?roleB .
    {
      ?roleA a iof-core:BuyerRole ;
             iof-core:roleOf iof-scro:org-0001 .
      ?roleB a iof-core:SupplierRole ;
             iof-core:roleOf ?supplier .
    }
    UNION
    {
      ?roleB a iof-core:BuyerRole ;
             iof-core:roleOf iof-scro:org-0001 .
      ?roleA a iof-core:SupplierRole ;
             iof-core:roleOf ?supplier .
    }
    BIND("first-tier" AS ?tier)
    OPTIONAL { ?supplier rdfs:label ?supplierName . }
  }
  UNION
  {
    # セカンドティア(二次)サプライヤー: まずFordに直接供給している一次サプライヤーを抽出し、
    # その一次サプライヤーに供給している企業を取得
    {
      SELECT DISTINCT ?firstTierSupplier
      WHERE {
        ?supplyRel1 a iof-scro:SupplyRelationship ;
                    obo:BFO_0000195 ?roleC, ?roleD .
        {
          ?roleC a iof-core:BuyerRole ;
                 iof-core:roleOf iof-scro:org-0001 .
          ?roleD a iof-core:SupplierRole ;
                 iof-core:roleOf ?firstTierSupplier .
        }
        UNION
        {
          ?roleD a iof-core:BuyerRole ;
                 iof-core:roleOf iof-scro:org-0001 .
          ?roleC a iof-core:SupplierRole ;
                 iof-core:roleOf ?firstTierSupplier .
        }
      }
    }
    ?supplyRel2 a iof-scro:SupplyRelationship ;
                obo:BFO_0000195 ?roleE, ?roleF .
    {
      ?roleE a iof-core:BuyerRole ;
             iof-core:roleOf ?firstTierSupplier .
      ?roleF a iof-core:SupplierRole ;
             iof-core:roleOf ?supplier .
    }
    UNION
    {
      ?roleF a iof-core:BuyerRole ;
             iof-core:roleOf ?firstTierSupplier .
      ?roleE a iof-core:SupplierRole ;
             iof-core:roleOf ?supplier .
    }
    BIND("second-tier" AS ?tier)
    OPTIONAL { ?supplier rdfs:label ?supplierName . }
  }
}

image.png

次にやるべきこと

SCRO の Taxonomy の全体像を理解

image.png

出所:ontology/supplychain/README.md at master · iofoundry/ontology

IOF Ontology のページの理解

image.png

出所:IOF

image.png

出所:Ontology Viewer

OAGI の atlassian の公開ページを理解

image.png

出所:Industrial Ontologies Foundry - OAGi

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?