dfc-linkml-connector 2.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/LICENSE +21 -0
- data/README.md +78 -0
- data/contexts/context_2.0.0.json +544 -0
- data/lib/core/connector.rb +670 -0
- data/lib/core/json_ld_serializer.rb +92 -0
- data/lib/core/semantic_object.rb +103 -0
- data/lib/core/vocabulary_loader.rb +125 -0
- data/lib/dfc_linkml_connector.rb +102 -0
- data/lib/models/address.rb +68 -0
- data/lib/models/agent.rb +83 -0
- data/lib/models/allergen_characteristic.rb +57 -0
- data/lib/models/as_planned_consumption_flow.rb +25 -0
- data/lib/models/as_planned_local_consumption_flow.rb +25 -0
- data/lib/models/as_planned_local_production_flow.rb +25 -0
- data/lib/models/as_planned_local_transformation.rb +53 -0
- data/lib/models/as_planned_production_flow.rb +25 -0
- data/lib/models/as_planned_transformation.rb +38 -0
- data/lib/models/as_realized_consumption_flow.rb +25 -0
- data/lib/models/as_realized_production_flow.rb +25 -0
- data/lib/models/as_realized_transformation.rb +48 -0
- data/lib/models/brand.rb +33 -0
- data/lib/models/catalog.rb +43 -0
- data/lib/models/catalog_item.rb +93 -0
- data/lib/models/certfication.rb +43 -0
- data/lib/models/collection.rb +47 -0
- data/lib/models/concept.rb +82 -0
- data/lib/models/concept_scheme.rb +47 -0
- data/lib/models/consumption_flow.rb +67 -0
- data/lib/models/coordination.rb +62 -0
- data/lib/models/customer_category.rb +38 -0
- data/lib/models/defined_product.rb +178 -0
- data/lib/models/delivery_option.rb +48 -0
- data/lib/models/delivery_step.rb +25 -0
- data/lib/models/ditributed_representation.rb +47 -0
- data/lib/models/enterprise.rb +29 -0
- data/lib/models/feature.rb +57 -0
- data/lib/models/functional_product.rb +33 -0
- data/lib/models/geometry.rb +52 -0
- data/lib/models/how_subject.rb +47 -0
- data/lib/models/individual.rb +47 -0
- data/lib/models/ingredient.rb +38 -0
- data/lib/models/labelling_characteristic.rb +57 -0
- data/lib/models/length.rb +25 -0
- data/lib/models/localized_product.rb +68 -0
- data/lib/models/nutrient_characteristic.rb +57 -0
- data/lib/models/offer.rb +82 -0
- data/lib/models/opening_hours_specification.rb +62 -0
- data/lib/models/order.rb +115 -0
- data/lib/models/order_line.rb +86 -0
- data/lib/models/organization.rb +92 -0
- data/lib/models/payment_method.rb +43 -0
- data/lib/models/person.rb +38 -0
- data/lib/models/phone_number.rb +38 -0
- data/lib/models/physical_characteristic.rb +57 -0
- data/lib/models/physical_place.rb +58 -0
- data/lib/models/physical_product.rb +78 -0
- data/lib/models/pick_up_step.rb +25 -0
- data/lib/models/pickup_option.rb +33 -0
- data/lib/models/place.rb +28 -0
- data/lib/models/platform.rb +25 -0
- data/lib/models/point.rb +25 -0
- data/lib/models/polygon.rb +25 -0
- data/lib/models/price.rb +37 -0
- data/lib/models/product_batch.rb +53 -0
- data/lib/models/product_option.rb +28 -0
- data/lib/models/product_option_value.rb +25 -0
- data/lib/models/production_flow.rb +67 -0
- data/lib/models/properties.rb +47 -0
- data/lib/models/quantitative_value.rb +33 -0
- data/lib/models/real_stock.rb +38 -0
- data/lib/models/representation_pivot.rb +25 -0
- data/lib/models/represented_thing.rb +25 -0
- data/lib/models/route.rb +38 -0
- data/lib/models/sale_session.rb +92 -0
- data/lib/models/shipment.rb +77 -0
- data/lib/models/shipping_option.rb +58 -0
- data/lib/models/social_media.rb +33 -0
- data/lib/models/step.rb +48 -0
- data/lib/models/stock.rb +67 -0
- data/lib/models/supplied_product.rb +73 -0
- data/lib/models/technical_product.rb +38 -0
- data/lib/models/temperature.rb +28 -0
- data/lib/models/template_sale_session.rb +57 -0
- data/lib/models/theoritical_stock.rb +33 -0
- data/lib/models/transaction.rb +62 -0
- data/lib/models/transformation.rb +25 -0
- data/lib/models/value_r_e_c_u_r.rb +67 -0
- data/lib/models/variant.rb +33 -0
- data/lib/models/variant_caracteristic.rb +33 -0
- data/lib/models/vehicle.rb +58 -0
- data/lib/models/vevent.rb +62 -0
- data/lib/models/virtual_place.rb +33 -0
- data/lib/models/volume.rb +25 -0
- data/lib/models/weight.rb +25 -0
- data/lib/models/what_subject.rb +47 -0
- data/lib/models/where_subject.rb +47 -0
- data/lib/models/who_subject.rb +47 -0
- data/vocabularies/facet.jsonld +4130 -0
- data/vocabularies/measure.jsonld +2586 -0
- data/vocabularies/product_type.jsonld +10116 -0
- data/vocabularies/scope.jsonld +190 -0
- data/vocabularies/vocabulary_term.jsonld +502 -0
- metadata +199 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'json'
|
|
4
|
+
require 'json/ld'
|
|
5
|
+
|
|
6
|
+
module DfcLinkmlConnector
|
|
7
|
+
module Core
|
|
8
|
+
# Serializes DFC semantic objects to JSON-LD.
|
|
9
|
+
class JsonLdSerializer
|
|
10
|
+
def initialize(context = nil, context_url = nil)
|
|
11
|
+
@context = context
|
|
12
|
+
@context_url = context_url
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Returns the JSON-LD document as a Hash with CURIE predicates
|
|
16
|
+
# (uncompacted). Single objects are returned as-is; multiple objects
|
|
17
|
+
# are wrapped in an @graph.
|
|
18
|
+
def serialize(*objects)
|
|
19
|
+
if objects.length == 1
|
|
20
|
+
return _serialize_object(objects.first)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
{
|
|
24
|
+
"@context" => _context_iri,
|
|
25
|
+
"@graph" => objects.map { |obj| _serialize_object(obj) },
|
|
26
|
+
}
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Returns a compacted JSON-LD JSON string using the original context.
|
|
30
|
+
# Falls back to the plain serialization when no context is available,
|
|
31
|
+
# keeping the context URL so CURIE predicates stay expandable.
|
|
32
|
+
def to_json(*objects)
|
|
33
|
+
doc = serialize(*objects)
|
|
34
|
+
inner = _inner_context
|
|
35
|
+
if inner.nil?
|
|
36
|
+
doc["@context"] ||= _context_iri
|
|
37
|
+
else
|
|
38
|
+
expanded = JSON::LD::API.expand(doc.merge("@context" => inner))
|
|
39
|
+
doc = JSON::LD::API.compact(expanded, inner)
|
|
40
|
+
doc["@context"] = _context_iri
|
|
41
|
+
end
|
|
42
|
+
JSON.pretty_generate(doc)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
private
|
|
46
|
+
|
|
47
|
+
def _context_iri
|
|
48
|
+
@context_url || Connector.default_context_url
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def _inner_context
|
|
52
|
+
return nil if @context.nil?
|
|
53
|
+
@context.is_a?(Hash) && @context.key?("@context") ? @context["@context"] : @context
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def _serialize_object(obj)
|
|
57
|
+
result = {
|
|
58
|
+
"@id" => obj.semanticId,
|
|
59
|
+
"@type" => obj.semanticType,
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
obj.instance_variable_get(:@semanticProperties).each do |predicate, prop|
|
|
63
|
+
value = prop.getter.call
|
|
64
|
+
next if value.nil?
|
|
65
|
+
|
|
66
|
+
if value.is_a?(Array)
|
|
67
|
+
next if value.empty?
|
|
68
|
+
if value.first.is_a?(SemanticObject)
|
|
69
|
+
result[predicate] = value.map { |v| v.semanticId }
|
|
70
|
+
else
|
|
71
|
+
result[predicate] = value
|
|
72
|
+
end
|
|
73
|
+
elsif value.is_a?(SemanticObject)
|
|
74
|
+
result[predicate] = value.semanticId
|
|
75
|
+
elsif value.is_a?(Hash)
|
|
76
|
+
# Embedded blank node (e.g. original Price value object without
|
|
77
|
+
# @id): keep as-is so it serializes to JSON-LD, not Ruby inspect.
|
|
78
|
+
result[predicate] = value
|
|
79
|
+
elsif value.is_a?(Numeric) || value == true || value == false
|
|
80
|
+
result[predicate] = value
|
|
81
|
+
elsif value.is_a?(String)
|
|
82
|
+
result[predicate] = value
|
|
83
|
+
else
|
|
84
|
+
result[predicate] = value.to_s
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
result
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'json'
|
|
4
|
+
require 'net/http'
|
|
5
|
+
require 'uri'
|
|
6
|
+
|
|
7
|
+
module DfcLinkmlConnector
|
|
8
|
+
module Core
|
|
9
|
+
# Base class for all DFC semantic objects.
|
|
10
|
+
# Maintains a type registry for JSON-LD import.
|
|
11
|
+
class SemanticObject
|
|
12
|
+
@type_registry = {}
|
|
13
|
+
|
|
14
|
+
class << self
|
|
15
|
+
attr_reader :type_registry
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
attr_accessor :semanticId
|
|
19
|
+
attr_accessor :semanticType
|
|
20
|
+
|
|
21
|
+
def initialize(semanticId)
|
|
22
|
+
@semanticId = semanticId
|
|
23
|
+
@semanticType = nil
|
|
24
|
+
@semanticProperties = {}
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def registerSemanticProperty(predicate, &getter)
|
|
28
|
+
prop = SemanticProperty.new(predicate, &getter)
|
|
29
|
+
@semanticProperties[predicate] = prop
|
|
30
|
+
prop
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def registered_predicates
|
|
34
|
+
@semanticProperties.keys
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def registered_value(predicate)
|
|
38
|
+
prop = @semanticProperties[predicate]
|
|
39
|
+
prop&.getter&.call
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def semantic_property_value(predicate)
|
|
43
|
+
prop = @semanticProperties[predicate]
|
|
44
|
+
prop&.getter&.call
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def to_jsonld(context = nil)
|
|
48
|
+
result = {
|
|
49
|
+
"@context" => context || default_context,
|
|
50
|
+
"@id" => @semanticId,
|
|
51
|
+
"@type" => @semanticType,
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
@semanticProperties.each do |predicate, prop|
|
|
55
|
+
value = prop.getter.call
|
|
56
|
+
next if value.nil?
|
|
57
|
+
|
|
58
|
+
if value.is_a?(Array)
|
|
59
|
+
next if value.empty?
|
|
60
|
+
if value.first.is_a?(SemanticObject)
|
|
61
|
+
result[predicate] = value.map { |v| v.semanticId }
|
|
62
|
+
else
|
|
63
|
+
result[predicate] = value
|
|
64
|
+
end
|
|
65
|
+
elsif value.is_a?(SemanticObject)
|
|
66
|
+
result[predicate] = value.semanticId
|
|
67
|
+
elsif value.is_a?(Numeric) || value == true || value == false
|
|
68
|
+
result[predicate] = value
|
|
69
|
+
elsif value.is_a?(Hash)
|
|
70
|
+
# Embedded blank node (e.g. original Price value object without
|
|
71
|
+
# @id): keep as-is so it serializes to JSON-LD, not Ruby inspect.
|
|
72
|
+
result[predicate] = value
|
|
73
|
+
else
|
|
74
|
+
result[predicate] = value.to_s
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
result
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def to_json(context = nil)
|
|
82
|
+
JSON.generate(to_jsonld(context))
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
private
|
|
86
|
+
|
|
87
|
+
def default_context
|
|
88
|
+
Connector.default_context_url
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
class SemanticProperty
|
|
92
|
+
attr_accessor :predicate
|
|
93
|
+
attr_accessor :getter
|
|
94
|
+
attr_accessor :valueSetter
|
|
95
|
+
|
|
96
|
+
def initialize(predicate, &getter)
|
|
97
|
+
@predicate = predicate
|
|
98
|
+
@getter = getter
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'json'
|
|
4
|
+
require 'net/http'
|
|
5
|
+
require 'uri'
|
|
6
|
+
|
|
7
|
+
module DfcLinkmlConnector
|
|
8
|
+
module Core
|
|
9
|
+
# Loads DFC SKOS vocabularies from JSON-LD files.
|
|
10
|
+
# Supports fetching from versioned w3id URLs or loading local data.
|
|
11
|
+
class VocabularyLoader
|
|
12
|
+
TAXONOMY_BASE_URL = "https://w3id.org/dfc/taxonomies".freeze
|
|
13
|
+
BUNDLED_DIR = File.expand_path("../../vocabularies", __dir__).freeze
|
|
14
|
+
BUNDLED_FILES = {
|
|
15
|
+
"Facet" => "facet.jsonld",
|
|
16
|
+
"Measure" => "measure.jsonld",
|
|
17
|
+
"ProductType" => "product_type.jsonld",
|
|
18
|
+
"Scope" => "scope.jsonld",
|
|
19
|
+
"VocabularyTerm" => "vocabulary_term.jsonld",
|
|
20
|
+
}.freeze
|
|
21
|
+
# Maps the taxonomy URL file name to the internal vocabulary key.
|
|
22
|
+
# Keys are plural/lowercased URL segments (e.g. "facets") to match TS
|
|
23
|
+
# VocabularyLoader.URL_TO_KEY and the w3id taxonomy URLs.
|
|
24
|
+
URL_TO_KEY = {
|
|
25
|
+
"facets" => "Facet",
|
|
26
|
+
"measures" => "Measure",
|
|
27
|
+
"producttypes" => "ProductType",
|
|
28
|
+
"scopes" => "Scope",
|
|
29
|
+
"vocabularyterms" => "VocabularyTerm",
|
|
30
|
+
}.freeze
|
|
31
|
+
|
|
32
|
+
def initialize(taxonomy_version: "2.0.0", ontology_version: "2.0.0")
|
|
33
|
+
@taxonomy_version = taxonomy_version
|
|
34
|
+
@ontology_version = ontology_version
|
|
35
|
+
@vocabularies = {}
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def load_bundled(name)
|
|
39
|
+
file = BUNDLED_FILES[name]
|
|
40
|
+
return self unless file
|
|
41
|
+
path = File.join(BUNDLED_DIR, file)
|
|
42
|
+
return self unless File.exist?(path)
|
|
43
|
+
load(name, JSON.parse(File.read(path)))
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def load(name, json_data)
|
|
47
|
+
concepts = {}
|
|
48
|
+
json_data.fetch("@graph", []).each do |entry|
|
|
49
|
+
types = entry["@type"]
|
|
50
|
+
types = [types] unless types.is_a?(Array)
|
|
51
|
+
is_concept = types&.any? { |t| t == "skos:Concept" || t == "http://www.w3.org/2004/02/skos/core#Concept" }
|
|
52
|
+
next unless is_concept
|
|
53
|
+
notation = extract_concept_key(entry)
|
|
54
|
+
next unless notation
|
|
55
|
+
concepts[notation] = entry
|
|
56
|
+
end
|
|
57
|
+
@vocabularies[name] = concepts
|
|
58
|
+
self
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
private
|
|
62
|
+
|
|
63
|
+
def extract_concept_key(entry)
|
|
64
|
+
candidates = ["skos:notation", "http://www.w3.org/2004/02/skos/core#notation", "skos:prefLabel", "http://www.w3.org/2004/02/skos/core#prefLabel"]
|
|
65
|
+
candidates.each do |field|
|
|
66
|
+
value = entry[field]
|
|
67
|
+
next if value.nil?
|
|
68
|
+
return value if value.is_a?(String)
|
|
69
|
+
if value.is_a?(Array)
|
|
70
|
+
value.each do |item|
|
|
71
|
+
return item if item.is_a?(String)
|
|
72
|
+
if item.is_a?(Hash) && item["@value"].is_a?(String)
|
|
73
|
+
return item["@value"]
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
nil
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
public
|
|
82
|
+
|
|
83
|
+
def load_from_url(name)
|
|
84
|
+
url = "#{TAXONOMY_BASE_URL}/v#{@taxonomy_version}/#{name}.json"
|
|
85
|
+
uri = URI(url)
|
|
86
|
+
request = Net::HTTP::Get.new(uri)
|
|
87
|
+
request["dfc-version"] = @ontology_version
|
|
88
|
+
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == "https") { |http| http.request(request) }
|
|
89
|
+
raise "Failed to fetch taxonomy from #{url}: #{response.code}" unless response.is_a?(Net::HTTPSuccess)
|
|
90
|
+
json_data = JSON.parse(response.body)
|
|
91
|
+
key = URL_TO_KEY.fetch(name.downcase, name)
|
|
92
|
+
load(key, json_data)
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def vocabulary(name)
|
|
96
|
+
@vocabularies[name] || {}
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def facet(key = nil)
|
|
100
|
+
vocab = vocabulary("Facet")
|
|
101
|
+
key ? vocab[key] : vocab
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def measure(key = nil)
|
|
105
|
+
vocab = vocabulary("Measure")
|
|
106
|
+
key ? vocab[key] : vocab
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def product_type(key = nil)
|
|
110
|
+
vocab = vocabulary("ProductType")
|
|
111
|
+
key ? vocab[key] : vocab
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def scope(key = nil)
|
|
115
|
+
vocab = vocabulary("Scope")
|
|
116
|
+
key ? vocab[key] : vocab
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def vocabulary_term(key = nil)
|
|
120
|
+
vocab = vocabulary("VocabularyTerm")
|
|
121
|
+
key ? vocab[key] : vocab
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
end
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'core/semantic_object'
|
|
4
|
+
require_relative 'core/vocabulary_loader'
|
|
5
|
+
require_relative 'core/json_ld_serializer'
|
|
6
|
+
require_relative 'core/connector'
|
|
7
|
+
|
|
8
|
+
require_relative 'models/address'
|
|
9
|
+
require_relative 'models/agent'
|
|
10
|
+
require_relative 'models/allergen_characteristic'
|
|
11
|
+
require_relative 'models/as_planned_consumption_flow'
|
|
12
|
+
require_relative 'models/as_planned_local_consumption_flow'
|
|
13
|
+
require_relative 'models/as_planned_local_production_flow'
|
|
14
|
+
require_relative 'models/as_planned_local_transformation'
|
|
15
|
+
require_relative 'models/as_planned_production_flow'
|
|
16
|
+
require_relative 'models/as_planned_transformation'
|
|
17
|
+
require_relative 'models/as_realized_consumption_flow'
|
|
18
|
+
require_relative 'models/as_realized_production_flow'
|
|
19
|
+
require_relative 'models/as_realized_transformation'
|
|
20
|
+
require_relative 'models/brand'
|
|
21
|
+
require_relative 'models/catalog'
|
|
22
|
+
require_relative 'models/catalog_item'
|
|
23
|
+
require_relative 'models/certfication'
|
|
24
|
+
require_relative 'models/collection'
|
|
25
|
+
require_relative 'models/concept'
|
|
26
|
+
require_relative 'models/concept_scheme'
|
|
27
|
+
require_relative 'models/consumption_flow'
|
|
28
|
+
require_relative 'models/coordination'
|
|
29
|
+
require_relative 'models/customer_category'
|
|
30
|
+
require_relative 'models/ditributed_representation'
|
|
31
|
+
require_relative 'models/defined_product'
|
|
32
|
+
require_relative 'models/delivery_option'
|
|
33
|
+
require_relative 'models/delivery_step'
|
|
34
|
+
require_relative 'models/enterprise'
|
|
35
|
+
require_relative 'models/feature'
|
|
36
|
+
require_relative 'models/functional_product'
|
|
37
|
+
require_relative 'models/geometry'
|
|
38
|
+
require_relative 'models/how_subject'
|
|
39
|
+
require_relative 'models/individual'
|
|
40
|
+
require_relative 'models/ingredient'
|
|
41
|
+
require_relative 'models/labelling_characteristic'
|
|
42
|
+
require_relative 'models/length'
|
|
43
|
+
require_relative 'models/localized_product'
|
|
44
|
+
require_relative 'models/nutrient_characteristic'
|
|
45
|
+
require_relative 'models/offer'
|
|
46
|
+
require_relative 'models/opening_hours_specification'
|
|
47
|
+
require_relative 'models/order'
|
|
48
|
+
require_relative 'models/order_line'
|
|
49
|
+
require_relative 'models/organization'
|
|
50
|
+
require_relative 'models/payment_method'
|
|
51
|
+
require_relative 'models/person'
|
|
52
|
+
require_relative 'models/phone_number'
|
|
53
|
+
require_relative 'models/physical_characteristic'
|
|
54
|
+
require_relative 'models/physical_place'
|
|
55
|
+
require_relative 'models/physical_product'
|
|
56
|
+
require_relative 'models/pick_up_step'
|
|
57
|
+
require_relative 'models/pickup_option'
|
|
58
|
+
require_relative 'models/place'
|
|
59
|
+
require_relative 'models/platform'
|
|
60
|
+
require_relative 'models/point'
|
|
61
|
+
require_relative 'models/polygon'
|
|
62
|
+
require_relative 'models/price'
|
|
63
|
+
require_relative 'models/product_batch'
|
|
64
|
+
require_relative 'models/product_option'
|
|
65
|
+
require_relative 'models/product_option_value'
|
|
66
|
+
require_relative 'models/production_flow'
|
|
67
|
+
require_relative 'models/properties'
|
|
68
|
+
require_relative 'models/quantitative_value'
|
|
69
|
+
require_relative 'models/real_stock'
|
|
70
|
+
require_relative 'models/representation_pivot'
|
|
71
|
+
require_relative 'models/represented_thing'
|
|
72
|
+
require_relative 'models/route'
|
|
73
|
+
require_relative 'models/sale_session'
|
|
74
|
+
require_relative 'models/shipment'
|
|
75
|
+
require_relative 'models/shipping_option'
|
|
76
|
+
require_relative 'models/social_media'
|
|
77
|
+
require_relative 'models/step'
|
|
78
|
+
require_relative 'models/stock'
|
|
79
|
+
require_relative 'models/supplied_product'
|
|
80
|
+
require_relative 'models/technical_product'
|
|
81
|
+
require_relative 'models/temperature'
|
|
82
|
+
require_relative 'models/template_sale_session'
|
|
83
|
+
require_relative 'models/theoritical_stock'
|
|
84
|
+
require_relative 'models/transaction'
|
|
85
|
+
require_relative 'models/transformation'
|
|
86
|
+
require_relative 'models/value_r_e_c_u_r'
|
|
87
|
+
require_relative 'models/variant'
|
|
88
|
+
require_relative 'models/variant_caracteristic'
|
|
89
|
+
require_relative 'models/vehicle'
|
|
90
|
+
require_relative 'models/vevent'
|
|
91
|
+
require_relative 'models/virtual_place'
|
|
92
|
+
require_relative 'models/volume'
|
|
93
|
+
require_relative 'models/weight'
|
|
94
|
+
require_relative 'models/what_subject'
|
|
95
|
+
require_relative 'models/where_subject'
|
|
96
|
+
require_relative 'models/who_subject'
|
|
97
|
+
|
|
98
|
+
module DfcLinkmlConnector
|
|
99
|
+
VERSION = '2.0.0'
|
|
100
|
+
ONTOLOGY_VERSION = '2.0.0'
|
|
101
|
+
TAXONOMY_VERSION = '2.0.0'
|
|
102
|
+
end
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Class from DFC Business Ontology: #Address
|
|
4
|
+
require_relative '../core/semantic_object'
|
|
5
|
+
require_relative 'where_subject'
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
module DfcLinkmlConnector
|
|
9
|
+
module Models
|
|
10
|
+
class Address < WhereSubject
|
|
11
|
+
SEMANTIC_TYPE = "dfc-b:Address".freeze
|
|
12
|
+
|
|
13
|
+
# @return [String]
|
|
14
|
+
attr_accessor :city
|
|
15
|
+
|
|
16
|
+
# @return [String]
|
|
17
|
+
attr_accessor :country
|
|
18
|
+
|
|
19
|
+
# @return [Float]
|
|
20
|
+
attr_accessor :latitude
|
|
21
|
+
|
|
22
|
+
# @return [Float]
|
|
23
|
+
attr_accessor :longitude
|
|
24
|
+
|
|
25
|
+
# @return [String]
|
|
26
|
+
attr_accessor :postcode
|
|
27
|
+
|
|
28
|
+
# @return [String]
|
|
29
|
+
attr_accessor :region
|
|
30
|
+
|
|
31
|
+
# @return [String]
|
|
32
|
+
attr_accessor :street
|
|
33
|
+
|
|
34
|
+
# @return [String]
|
|
35
|
+
attr_accessor :address_of
|
|
36
|
+
|
|
37
|
+
# @return [String]
|
|
38
|
+
attr_accessor :has_country
|
|
39
|
+
|
|
40
|
+
# @param semanticId [String]
|
|
41
|
+
# @param date: nil, description: nil, name: nil, characteristicOf: nil, dimension: nil, city: nil, country: nil, latitude: nil, longitude: nil, postcode: nil, region: nil, street: nil, addressOf: nil, hasCountry: nil
|
|
42
|
+
def initialize(semanticId, date: nil, description: nil, name: nil, characteristicOf: nil, dimension: nil, city: nil, country: nil, latitude: nil, longitude: nil, postcode: nil, region: nil, street: nil, addressOf: nil, hasCountry: nil)
|
|
43
|
+
super(semanticId, date: date, description: description, name: name, characteristicOf: characteristicOf, dimension: dimension)
|
|
44
|
+
@city = city
|
|
45
|
+
@country = country
|
|
46
|
+
@latitude = latitude
|
|
47
|
+
@longitude = longitude
|
|
48
|
+
@postcode = postcode
|
|
49
|
+
@region = region
|
|
50
|
+
@street = street
|
|
51
|
+
@address_of = addressOf
|
|
52
|
+
@has_country = hasCountry
|
|
53
|
+
self.semanticType = "dfc-b:Address"
|
|
54
|
+
registerSemanticProperty("dfc-b:city", &method("city")).valueSetter = method("city=")
|
|
55
|
+
registerSemanticProperty("dfc-b:country", &method("country")).valueSetter = method("country=")
|
|
56
|
+
registerSemanticProperty("dfc-b:latitude", &method("latitude")).valueSetter = method("latitude=")
|
|
57
|
+
registerSemanticProperty("dfc-b:longitude", &method("longitude")).valueSetter = method("longitude=")
|
|
58
|
+
registerSemanticProperty("dfc-b:postcode", &method("postcode")).valueSetter = method("postcode=")
|
|
59
|
+
registerSemanticProperty("dfc-b:region", &method("region")).valueSetter = method("region=")
|
|
60
|
+
registerSemanticProperty("dfc-b:street", &method("street")).valueSetter = method("street=")
|
|
61
|
+
registerSemanticProperty("dfc-b:addressOf", &method("address_of")).valueSetter = method("address_of=")
|
|
62
|
+
registerSemanticProperty("dfc-b:hasCountry", &method("has_country")).valueSetter = method("has_country=")
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
Core::SemanticObject.type_registry[SEMANTIC_TYPE] = self
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
data/lib/models/agent.rb
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Class from DFC Business Ontology: #Agent
|
|
4
|
+
require_relative '../core/semantic_object'
|
|
5
|
+
require_relative 'who_subject'
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
module DfcLinkmlConnector
|
|
9
|
+
module Models
|
|
10
|
+
class Agent < WhoSubject
|
|
11
|
+
SEMANTIC_TYPE = "dfc-b:Agent".freeze
|
|
12
|
+
|
|
13
|
+
# @return [String]
|
|
14
|
+
attr_accessor :email
|
|
15
|
+
|
|
16
|
+
# @return [String]
|
|
17
|
+
attr_accessor :logo
|
|
18
|
+
|
|
19
|
+
# @return [String]
|
|
20
|
+
attr_accessor :website_page
|
|
21
|
+
|
|
22
|
+
# @return [String]
|
|
23
|
+
attr_accessor :has_phone_number
|
|
24
|
+
|
|
25
|
+
# @return [String]
|
|
26
|
+
attr_accessor :social_media
|
|
27
|
+
|
|
28
|
+
# @return [String]
|
|
29
|
+
attr_accessor :owns
|
|
30
|
+
|
|
31
|
+
# @return [String]
|
|
32
|
+
attr_accessor :sells
|
|
33
|
+
|
|
34
|
+
# @return [Person, String]
|
|
35
|
+
attr_accessor :affiliated_to
|
|
36
|
+
|
|
37
|
+
# @return [Array<Address, String>]
|
|
38
|
+
attr_accessor :address
|
|
39
|
+
|
|
40
|
+
# @return [Array<CustomerCategory, String>]
|
|
41
|
+
attr_accessor :is_member_of
|
|
42
|
+
|
|
43
|
+
# @return [Array<Order, String>]
|
|
44
|
+
attr_accessor :orders
|
|
45
|
+
|
|
46
|
+
# @return [Array<FunctionalProduct, String>]
|
|
47
|
+
attr_accessor :requests
|
|
48
|
+
|
|
49
|
+
# @param semanticId [String]
|
|
50
|
+
# @param date: nil, description: nil, name: nil, characteristicOf: nil, dimension: nil, email: nil, logo: nil, websitePage: nil, hasPhoneNumber: nil, socialMedia: nil, owns: nil, sells: nil, affiliatedTo: nil, address: [], isMemberOf: [], orders: [], requests: []
|
|
51
|
+
def initialize(semanticId, date: nil, description: nil, name: nil, characteristicOf: nil, dimension: nil, email: nil, logo: nil, websitePage: nil, hasPhoneNumber: nil, socialMedia: nil, owns: nil, sells: nil, affiliatedTo: nil, address: [], isMemberOf: [], orders: [], requests: [])
|
|
52
|
+
super(semanticId, date: date, description: description, name: name, characteristicOf: characteristicOf, dimension: dimension)
|
|
53
|
+
@email = email
|
|
54
|
+
@logo = logo
|
|
55
|
+
@website_page = websitePage
|
|
56
|
+
@has_phone_number = hasPhoneNumber
|
|
57
|
+
@social_media = socialMedia
|
|
58
|
+
@owns = owns
|
|
59
|
+
@sells = sells
|
|
60
|
+
@affiliated_to = affiliatedTo
|
|
61
|
+
@address = address
|
|
62
|
+
@is_member_of = isMemberOf
|
|
63
|
+
@orders = orders
|
|
64
|
+
@requests = requests
|
|
65
|
+
self.semanticType = "dfc-b:Agent"
|
|
66
|
+
registerSemanticProperty("dfc-b:email", &method("email")).valueSetter = method("email=")
|
|
67
|
+
registerSemanticProperty("dfc-b:logo", &method("logo")).valueSetter = method("logo=")
|
|
68
|
+
registerSemanticProperty("dfc-b:websitePage", &method("website_page")).valueSetter = method("website_page=")
|
|
69
|
+
registerSemanticProperty("dfc-b:hasPhoneNumber", &method("has_phone_number")).valueSetter = method("has_phone_number=")
|
|
70
|
+
registerSemanticProperty("dfc-b:hasSocialMedia", &method("social_media")).valueSetter = method("social_media=")
|
|
71
|
+
registerSemanticProperty("dfc-b:owns", &method("owns")).valueSetter = method("owns=")
|
|
72
|
+
registerSemanticProperty("dfc-b:sells", &method("sells")).valueSetter = method("sells=")
|
|
73
|
+
registerSemanticProperty("dfc-b:affiliatedTo", &method("affiliated_to")).valueSetter = method("affiliated_to=")
|
|
74
|
+
registerSemanticProperty("dfc-b:hasAddress", &method("address")).valueSetter = method("address=")
|
|
75
|
+
registerSemanticProperty("dfc-b:isMemberOf", &method("is_member_of")).valueSetter = method("is_member_of=")
|
|
76
|
+
registerSemanticProperty("dfc-b:orders", &method("orders")).valueSetter = method("orders=")
|
|
77
|
+
registerSemanticProperty("dfc-b:requests", &method("requests")).valueSetter = method("requests=")
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
Core::SemanticObject.type_registry[SEMANTIC_TYPE] = self
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Class from DFC Business Ontology: #AllergenCharacteristic
|
|
4
|
+
require_relative '../core/semantic_object'
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
module DfcLinkmlConnector
|
|
8
|
+
module Models
|
|
9
|
+
class AllergenCharacteristic < Core::SemanticObject
|
|
10
|
+
SEMANTIC_TYPE = "dfc-b:AllergenCharacteristic".freeze
|
|
11
|
+
|
|
12
|
+
# @return [String]
|
|
13
|
+
attr_accessor :allergen_characteristic_of
|
|
14
|
+
|
|
15
|
+
# @return [String]
|
|
16
|
+
attr_accessor :date
|
|
17
|
+
|
|
18
|
+
# @return [String]
|
|
19
|
+
attr_accessor :description
|
|
20
|
+
|
|
21
|
+
# @return [String]
|
|
22
|
+
attr_accessor :name
|
|
23
|
+
|
|
24
|
+
# @return [String]
|
|
25
|
+
attr_accessor :characteristic_of
|
|
26
|
+
|
|
27
|
+
# @return [String]
|
|
28
|
+
attr_accessor :dimension
|
|
29
|
+
|
|
30
|
+
# @return [Concept, String]
|
|
31
|
+
attr_accessor :allergen_dimension
|
|
32
|
+
|
|
33
|
+
# @param semanticId [String]
|
|
34
|
+
# @param allergenCharacteristicOf: nil, date: nil, description: nil, name: nil, characteristicOf: nil, dimension: nil, allergenDimension: nil
|
|
35
|
+
def initialize(semanticId, allergenCharacteristicOf: nil, date: nil, description: nil, name: nil, characteristicOf: nil, dimension: nil, allergenDimension: nil)
|
|
36
|
+
super(semanticId)
|
|
37
|
+
@allergen_characteristic_of = allergenCharacteristicOf
|
|
38
|
+
@date = date
|
|
39
|
+
@description = description
|
|
40
|
+
@name = name
|
|
41
|
+
@characteristic_of = characteristicOf
|
|
42
|
+
@dimension = dimension
|
|
43
|
+
@allergen_dimension = allergenDimension
|
|
44
|
+
self.semanticType = "dfc-b:AllergenCharacteristic"
|
|
45
|
+
registerSemanticProperty("dfc-b:allergenCharacteristicOf", &method("allergen_characteristic_of")).valueSetter = method("allergen_characteristic_of=")
|
|
46
|
+
registerSemanticProperty("dfc-b:date", &method("date")).valueSetter = method("date=")
|
|
47
|
+
registerSemanticProperty("dfc-b:description", &method("description")).valueSetter = method("description=")
|
|
48
|
+
registerSemanticProperty("dfc-b:name", &method("name")).valueSetter = method("name=")
|
|
49
|
+
registerSemanticProperty("dfc-b:characteristicOf", &method("characteristic_of")).valueSetter = method("characteristic_of=")
|
|
50
|
+
registerSemanticProperty("dfc-b:hasDimension", &method("dimension")).valueSetter = method("dimension=")
|
|
51
|
+
registerSemanticProperty("dfc-b:hasAllergenDimension", &method("allergen_dimension")).valueSetter = method("allergen_dimension=")
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
Core::SemanticObject.type_registry[SEMANTIC_TYPE] = self
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Class from DFC Business Ontology: #AsPlannedConsumptionFlow
|
|
4
|
+
require_relative '../core/semantic_object'
|
|
5
|
+
require_relative 'consumption_flow'
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
module DfcLinkmlConnector
|
|
9
|
+
module Models
|
|
10
|
+
class AsPlannedConsumptionFlow < ConsumptionFlow
|
|
11
|
+
SEMANTIC_TYPE = "dfc-b:AsPlannedConsumptionFlow".freeze
|
|
12
|
+
|
|
13
|
+
# @param semanticId [String]
|
|
14
|
+
# @param quantity: nil, consumes: nil, inputOf: nil, date: nil, description: nil, name: nil, characteristicOf: nil, dimension: nil, hasQuantity: nil
|
|
15
|
+
def initialize(semanticId, quantity: nil, consumes: nil, inputOf: nil, date: nil, description: nil, name: nil, characteristicOf: nil, dimension: nil, hasQuantity: nil)
|
|
16
|
+
super(semanticId, quantity: quantity, consumes: consumes, inputOf: inputOf, date: date, description: description, name: name, characteristicOf: characteristicOf, dimension: dimension, hasQuantity: hasQuantity)
|
|
17
|
+
|
|
18
|
+
self.semanticType = "dfc-b:AsPlannedConsumptionFlow"
|
|
19
|
+
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
Core::SemanticObject.type_registry[SEMANTIC_TYPE] = self
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Class from DFC Business Ontology: #AsPlannedLocalConsumptionFlow
|
|
4
|
+
require_relative '../core/semantic_object'
|
|
5
|
+
require_relative 'consumption_flow'
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
module DfcLinkmlConnector
|
|
9
|
+
module Models
|
|
10
|
+
class AsPlannedLocalConsumptionFlow < ConsumptionFlow
|
|
11
|
+
SEMANTIC_TYPE = "dfc-b:AsPlannedLocalConsumptionFlow".freeze
|
|
12
|
+
|
|
13
|
+
# @param semanticId [String]
|
|
14
|
+
# @param quantity: nil, consumes: nil, inputOf: nil, date: nil, description: nil, name: nil, characteristicOf: nil, dimension: nil, hasQuantity: nil
|
|
15
|
+
def initialize(semanticId, quantity: nil, consumes: nil, inputOf: nil, date: nil, description: nil, name: nil, characteristicOf: nil, dimension: nil, hasQuantity: nil)
|
|
16
|
+
super(semanticId, quantity: quantity, consumes: consumes, inputOf: inputOf, date: date, description: description, name: name, characteristicOf: characteristicOf, dimension: dimension, hasQuantity: hasQuantity)
|
|
17
|
+
|
|
18
|
+
self.semanticType = "dfc-b:AsPlannedLocalConsumptionFlow"
|
|
19
|
+
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
Core::SemanticObject.type_registry[SEMANTIC_TYPE] = self
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|