SlideShare a Scribd company logo
object fields
Olivier Deschanels, Senior Consultant
objects in 4D
C_OBJECT

ARRAY OBJECT
field object
{}
based on JSON
{"LastName":"smith","age":42,"client":true}
based on JSON
{"LastName":"smith","age":42,"client":true}
{"Children":[

{"name":"Richard","age":7},

{"name":"Susan","age":4},

{"name":"James","age":3}

]}
based on JSON
more than JSON
more than JSON
OB SET($myObj;"currentTable";->[Customer])
more than JSON
OB SET($myObj;"currentTable";->[Customer])
OB SET($myObj;"currentPK";->[Customer]UUID)
how we can use object fields efficiently
user story
栄養⼠です。
患者の摂取カロリー量を研究するた
めに,⾷品と栄養価のデータベース
が欲しいのですが …
user story
栄養⼠です。
患者の摂取カロリー量を研究するた
めに,⾷品と栄養価のデータベース
が欲しいのですが …
わかりました
なんとかしましょう
user story
need: a nutrition database!
need: a nutrition database!
http://world.openfoodfacts.org
need: a nutrition database!
http://world.openfoodfacts.org
need: a nutrition database!
data
http://world.openfoodfacts.org/product/80177128/nutella-hazelnut-spread-with-cocoa-ferrero
data
http://world.openfoodfacts.org/product/80177128/nutella-hazelnut-spread-with-cocoa-ferrero
data
http://world.openfoodfacts.org/product/80177128/nutella-hazelnut-spread-with-cocoa-ferrero
data
download the data
download the data
download the data
download the data
160㎆
download the data
a csv file
import into 4D
ストラクチャを作成するんだけど,
どうしたらいい?
import into 4D
ストラクチャを作成するんだけど,
どうしたらいい? 新規テーブルを作成して

データを読み込めば,⾃動的に
フィールドが追加されるよ
import into 4D
ストラクチャを作成するんだけど,
どうしたらいい? 新規テーブルを作成して

データを読み込めば,⾃動的に
フィールドが追加されるよ正しくデータを扱いたいなら,
テーブル間のリレーションを定義しな
きゃダメ。4DがRDBMSだ

ということをお忘れなく
import into 4D
ストラクチャを作成するんだけど,
どうしたらいい? 新規テーブルを作成して

データを読み込めば,⾃動的に
フィールドが追加されるよ正しくデータを扱いたいなら,
テーブル間のリレーションを定義しな
きゃダメ。4DがRDBMSだ

ということをお忘れなく オブジェクト型フィールドが絶対
に良いはず。最新のやり⽅だし,今の
4Dはすごく強⼒だから
import into 4D
a flat table
a flat table
a flat table
a set of relational tables
a table with object fields
a table with object fields
file size report
カード
リレーショナル
オブジェクト
0 Mb 100 Mb 200 Mb 300 Mb 400 Mb 500 Mb 600 Mb
データ インデックス
file size report
カード
リレーショナル
オブジェクト
0 Mb 100 Mb 200 Mb 300 Mb 400 Mb 500 Mb 600 Mb
データ インデックス
file size report
カード
リレーショナル
オブジェクト
0 Mb 100 Mb 200 Mb 300 Mb 400 Mb 500 Mb 600 Mb
データ インデックス
file size report
and now some queries
search for a country in a flat table
search for a country in a flat table
インデックス必要
search for a country in a flat table
インデックス必要 Bツリー or クラスター?
search for a country in a flat table
インデックス必要 Bツリー or クラスター?
0 Mb 1 Mb 2 Mb 3 Mb 4 Mb
Bツリー
クラスター
search for a country in a flat table
ALL RECORDS([Country])
DISTINCT VALUES([Country]Country;$_country)
$time:=Milliseconds
For ($i;1;10000;1)
$country:="@"+$_country{(Random%Size of array($_country))+1}+"@"
QUERY([Aliment];[Aliment]countries_fr=$country)
End for
ALERT("Test 1: "+String(Milliseconds-$time))
インデックス必要 Bツリー or クラスター?
0 Mb 1 Mb 2 Mb 3 Mb 4 Mb
Bツリー
クラスター
search for a country in a flat table
ALL RECORDS([Country])
DISTINCT VALUES([Country]Country;$_country)
$time:=Milliseconds
For ($i;1;10000;1)
$country:="@"+$_country{(Random%Size of array($_country))+1}+"@"
QUERY([Aliment];[Aliment]countries_fr=$country)
End for
ALERT("Test 1: "+String(Milliseconds-$time)) 3,400ミリ秒
インデックス必要 Bツリー or クラスター?
0 Mb 1 Mb 2 Mb 3 Mb 4 Mb
Bツリー
クラスター
search for a country in a flat table
search for a country in relational tables
search for a country in relational tables
新規インデックス

必要なし
search for a country in relational tables
ALL RECORDS([Country])
DISTINCT VALUES([Country]Country;$_country)
$time:=Milliseconds
For ($i;1;10000;1)
$country:=$_country{(Random%Size of array($_country))+1}
QUERY BY FORMULA([Aliment];
([Country]Country=$country)
& ([Aliment_Country]UUID_Country=[Country]UUID)
& ([Aliment_Country]UUID_Aliment=[Aliment]UUID)
)
End for
ALERT("Test 2: "+String(Milliseconds-$time))
新規インデックス

必要なし
search for a country in relational tables
ALL RECORDS([Country])
DISTINCT VALUES([Country]Country;$_country)
$time:=Milliseconds
For ($i;1;10000;1)
$country:=$_country{(Random%Size of array($_country))+1}
QUERY BY FORMULA([Aliment];
([Country]Country=$country)
& ([Aliment_Country]UUID_Country=[Country]UUID)
& ([Aliment_Country]UUID_Aliment=[Aliment]UUID)
)
End for
ALERT("Test 2: "+String(Milliseconds-$time))
6,600ミリ秒
新規インデックス

必要なし
search for a country in relational tables
search in table with object fields
search in table with object fields
search in table with object fields
{"countries": ["United States"]}
search in table with object fields
{"countries": ["United States"]}
{"countries": ["France","Belgium"]}
search in table with object fields
{"countries": ["United States"]}
{"countries": ["France","Belgium"]}
インデックス必要
search in table with object fields
{"countries": ["United States"]}
{"countries": ["France","Belgium"]}
インデックス必要 ⾃動
search in table with object fields
{"countries": ["United States"]}
{"countries": ["France","Belgium"]}
インデックス必要 ⾃動 200KB
search in table with object fields
{"countries": ["United States"]}
ALL RECORDS([Country])
DISTINCT VALUES([Country]Country;$_country)
$time:=Milliseconds
For ($i;1;10000;1)
$country:=$_country{(Random%Size of array($_country))+1}
QUERY BY ATTRIBUTE([Aliment];[Aliment]countries;"countries[]";=;$country)
End for
ALERT("Test 3: "+String(Milliseconds-$time))
{"countries": ["France","Belgium"]}
インデックス必要 ⾃動 200KB
search in table with object fields
{"countries": ["United States"]}
ALL RECORDS([Country])
DISTINCT VALUES([Country]Country;$_country)
$time:=Milliseconds
For ($i;1;10000;1)
$country:=$_country{(Random%Size of array($_country))+1}
QUERY BY ATTRIBUTE([Aliment];[Aliment]countries;"countries[]";=;$country)
End for
ALERT("Test 3: "+String(Milliseconds-$time))
580ミリ秒
{"countries": ["France","Belgium"]}
インデックス必要 ⾃動 200KB
search in table with object fields
カード
リレーショナル
オブジェクト
0 Mb 100 Mb 200 Mb 300 Mb 400 Mb 500 Mb 600 Mb
データ
インデックス
新規インデックス
0 ms 750 ms 1 500 ms 2 250 ms 3 000 ms 3 750 ms 4 500 ms
report after a simple search
カード
リレーショナル
オブジェクト
0 Mb 100 Mb 200 Mb 300 Mb 400 Mb 500 Mb 600 Mb
データ
インデックス
新規インデックス
0 ms 750 ms 1 500 ms 2 250 ms 3 000 ms 3 750 ms 4 500 ms
カード
リレーショナル
オブジェクト
report after a simple search
特定の栄養素が含まれる
すべての⾷品を検索
a more complex search
search for a nutriment in relational tables
search for a nutriment in relational tables
新規インデックス不要
search for a nutriment in relational tables
新規インデックス不要 ALL RECORDS([Nutrition_type])
DISTINCT VALUES([Nutrition_type]Label;$_nutriment)
$time:=Milliseconds
For ($i;1;1000;1)
$nutriment:=$_nutriment{(Random%Size of array($_nutriment))+1}
QUERY BY FORMULA([Aliment];
([Nutrition_type]Label=$nutriment)
& ([Nutrition_for_100g]UUID_Nutrition_Type=[Nutrition_type]UUID)
& ([Nutrition_for_100g]UUID_Aliment=[Aliment]UUID)
)
End for
ALERT("Test 2 : "+String(Milliseconds-$time))
search for a nutriment in relational tables
新規インデックス不要 ALL RECORDS([Nutrition_type])
DISTINCT VALUES([Nutrition_type]Label;$_nutriment)
$time:=Milliseconds
For ($i;1;1000;1)
$nutriment:=$_nutriment{(Random%Size of array($_nutriment))+1}
QUERY BY FORMULA([Aliment];
([Nutrition_type]Label=$nutriment)
& ([Nutrition_for_100g]UUID_Nutrition_Type=[Nutrition_type]UUID)
& ([Nutrition_for_100g]UUID_Aliment=[Aliment]UUID)
)
End for
ALERT("Test 2 : "+String(Milliseconds-$time))3,200ミリ秒
search for a nutriment in relational tables
search for a nutriment in a table with object fields
search for a nutriment in a table with object fields
{
"energy": 1284,
"fat": 7,
"saturated fat": 3.6,
"carbohydrates": 54.2,
"sugars": 44,
"fiber": 4.7,
"proteins": 3.9,
"salt": 0.2,
"sodium": 0.078740157480315,
"nutrition score fr": 10,
"nutrition score uk": 10
}
search for a nutriment in a table with object fields
{
"energy": 1284,
"fat": 7,
"saturated fat": 3.6,
"carbohydrates": 54.2,
"sugars": 44,
"fiber": 4.7,
"proteins": 3.9,
"salt": 0.2,
"sodium": 0.078740157480315,
"nutrition score fr": 10,
"nutrition score uk": 10
}
インデックス必要
search for a nutriment in a table with object fields
{
"energy": 1284,
"fat": 7,
"saturated fat": 3.6,
"carbohydrates": 54.2,
"sugars": 44,
"fiber": 4.7,
"proteins": 3.9,
"salt": 0.2,
"sodium": 0.078740157480315,
"nutrition score fr": 10,
"nutrition score uk": 10
}
インデックス必要
⾃動
search for a nutriment in a table with object fields
{
"energy": 1284,
"fat": 7,
"saturated fat": 3.6,
"carbohydrates": 54.2,
"sugars": 44,
"fiber": 4.7,
"proteins": 3.9,
"salt": 0.2,
"sodium": 0.078740157480315,
"nutrition score fr": 10,
"nutrition score uk": 10
}
インデックス必要
⾃動
3.7MB
search for a nutriment in a table with object fields
search for a nutriment in a table with object fields
search for a nutriment in a table with object fields
C_OBJECT($undefined)
ALL RECORDS([Nutrition_type])
DISTINCT VALUES([Nutrition_type]Label;$_nutriment)
$time:=Milliseconds
For ($i;1;1000;1)
$nutriment:=$_nutriment{(Random%Size of array($_nutriment))+1}
QUERY BY ATTRIBUTE([Aliment];[Aliment]nutrition;$nutriment;#;$undefined)
End for
ALERT("Test 3: "+String(Milliseconds-$time))
search for a nutriment in a table with object fields
C_OBJECT($undefined)
ALL RECORDS([Nutrition_type])
DISTINCT VALUES([Nutrition_type]Label;$_nutriment)
$time:=Milliseconds
For ($i;1;1000;1)
$nutriment:=$_nutriment{(Random%Size of array($_nutriment))+1}
QUERY BY ATTRIBUTE([Aliment];[Aliment]nutrition;$nutriment;#;$undefined)
End for
ALERT("Test 3: "+String(Milliseconds-$time))
150ミリ秒
search for a nutriment in a table with object fields
search for a nutriment in a flat table
search for a nutriment in a flat table
96種類の栄養素
search for a nutriment in a flat table
96種類の栄養素
96個のフィールド
search for a nutriment in a flat table
96種類の栄養素
96個のフィールド
search for a nutriment in a flat table
96種類の栄養素
96個のフィールド
search for a nutriment in a flat table
96種類の栄養素
96個のフィールド
96フィールドのクエリ
search for a nutriment in a flat table
96種類の栄養素
96個のフィールド
96フィールドのクエリ 96個の追加インデックス
search for a nutriment in a flat table
96種類の栄養素
96個のフィールド
96フィールドのクエリ 96個の追加インデックス
102.7MB
search for a nutriment in a flat table
search for a nutriment in a flat table
ALL RECORDS([Nutrition_type])
DISTINCT VALUES([Nutrition_type]Label;$_nutriment)
GET FIELD TITLES([Aliment];$_champ;$_champ_num)
$time:=Milliseconds
For ($i;1;1000;1)
$nutriment:=$_nutriment{(Random%Size of array($_nutriment))+1}
$nutriment:=Replace string($nutriment;" ";"_")+"_100g"
$trouve:=Find in array($_champ;$nutriment)
If ($trouve>0)
$champ:=Field(Table(->[Aliment]);$_champ_num{$trouve})
QUERY([Aliment];$champ->#0)
Else
TRACE
End if
End for
ALERT("Test 1 : "+String(Milliseconds-$time))
search for a nutriment in a flat table
ALL RECORDS([Nutrition_type])
DISTINCT VALUES([Nutrition_type]Label;$_nutriment)
GET FIELD TITLES([Aliment];$_champ;$_champ_num)
$time:=Milliseconds
For ($i;1;1000;1)
$nutriment:=$_nutriment{(Random%Size of array($_nutriment))+1}
$nutriment:=Replace string($nutriment;" ";"_")+"_100g"
$trouve:=Find in array($_champ;$nutriment)
If ($trouve>0)
$champ:=Field(Table(->[Aliment]);$_champ_num{$trouve})
QUERY([Aliment];$champ->#0)
Else
TRACE
End if
End for
ALERT("Test 1 : "+String(Milliseconds-$time)) 1370ミリ秒
search for a nutriment in a flat table
0 ms 750 ms 1 500 ms 2 250 ms 3 000 ms 3 750 ms 4 500 ms
report after a more complex search
カード
リレーショナル
オブジェクト
0 Mb 100 Mb 200 Mb 300 Mb 400 Mb 500 Mb 600 Mb
データ
インデックス
新規インデックス
0 ms 750 ms 1 500 ms 2 250 ms 3 000 ms 3 750 ms 4 500 ms
report after a more complex search
カード
リレーショナル
オブジェクト
0 Mb 100 Mb 200 Mb 300 Mb 400 Mb 500 Mb 600 Mb
データ
インデックス
新規インデックス
0 ms 750 ms 1 500 ms 2 250 ms 3 000 ms 3 750 ms 4 500 ms
report after a more complex search
カード
リレーショナル
オブジェクト
0 Mb 100 Mb 200 Mb 300 Mb 400 Mb 500 Mb 600 Mb
データ
インデックス
新規インデックス
0 ms 750 ms 1 500 ms 2 250 ms 3 000 ms 3 750 ms 4 500 ms
report after a more complex search
カード
リレーショナル
オブジェクト
0 Mb 100 Mb 200 Mb 300 Mb 400 Mb 500 Mb 600 Mb
データ
インデックス
新規インデックス
0 ms 750 ms 1 500 ms 2 250 ms 3 000 ms 3 750 ms 4 500 ms
report after a more complex search
カード
リレーショナル
オブジェクト
0 Mb 100 Mb 200 Mb 300 Mb 400 Mb 500 Mb 600 Mb
データ
インデックス
新規インデックス
カード
リレーショナル
オブジェクト
単純なクエリ
複雑なクエリ
0 ms 750 ms 1 500 ms 2 250 ms 3 000 ms 3 750 ms 4 500 ms
report after a more complex search
カード
リレーショナル
オブジェクト
0 Mb 100 Mb 200 Mb 300 Mb 400 Mb 500 Mb 600 Mb
データ
インデックス
新規インデックス
カード
リレーショナル
オブジェクト
単純なクエリ
複雑なクエリ
0 ms 750 ms 1 500 ms 2 250 ms 3 000 ms 3 750 ms 4 500 ms
report after a more complex search
take a look on the cache
take a look on the cache
take a look on the cache
take a look on the cache
take a look on the cache
take a look on the cache
take a look on the cache
+50MBキャッシュを増量
take a look on the cache
how many object fields?
one or several object fields?
one or several object fields?


one or several object fields?


nutritionは96個の栄養素フィールド
インデックス設定は

nutritionとcountriesのみ
additives, categories, labelsは

いずれも値の配列
informationはもっと構造化されている
one or several object fields?
how to build a field respecting the rules
⼈物の連絡先をオブジェクト型
フィールドにまとめて保存したい:

電話・携帯・FAX・メール・skype…
conception rules
conception rules
{
conception rules
{
"Phone":"01 23 45 67 89",
conception rules
{
"Phone":"01 23 45 67 89",
"Fax":"01 23 45 67 88",
conception rules
{
"Phone":"01 23 45 67 89",
"Fax":"01 23 45 67 88",
"Mobile":"06 45 78 87 87",
conception rules
{
"Phone":"01 23 45 67 89",
"Fax":"01 23 45 67 88",
"Mobile":"06 45 78 87 87",
"Skype":"GeorgesC",
conception rules
{
"Phone":"01 23 45 67 89",
"Fax":"01 23 45 67 88",
"Mobile":"06 45 78 87 87",
"Skype":"GeorgesC",
"email":"georges@nespresso.com"
conception rules
{
"Phone":"01 23 45 67 89",
"Fax":"01 23 45 67 88",
"Mobile":"06 45 78 87 87",
"Skype":"GeorgesC",
"email":"georges@nespresso.com"
}
conception rules
{
"Phone":"01 23 45 67 89",
"Fax":"01 23 45 67 88",
"Mobile":"06 45 78 87 87",
"Skype":"GeorgesC",
"email":"georges@nespresso.com",
"Phone":"01 23 66 66 67"
}
conception rules
{
"Phone":"01 23 45 67 89",
"Fax":"01 23 45 67 88",
"Mobile":"06 45 78 87 87",
"Skype":"GeorgesC",
"email":"georges@nespresso.com",
"Phone":"01 23 66 66 67"
}
conception rules
{
"Phone":"01 23 45 67 89",
"Fax":"01 23 45 67 88",
"Mobile":"06 45 78 87 87",
"Skype":"GeorgesC",
"email":"georges@nespresso.com",
"Phone":"01 23 66 66 67"
}
プロパティ名の重複は許可されない
conception rules
{
"Phone":"01 23 45 67 89",
"Fax":"01 23 45 67 88",
"Mobile":"06 45 78 87 87",
"Skype":"GeorgesC",
"email":"georges@nespresso.com",
"Phone":"01 23 66 66 67"
}
プロパティ名の重複は許可されない
{
comm:
[
{"type":"Phone","number":"01 23 45 67 89"},
{"type":"Fax","number":"01 23 45 67 88"},
{"type":"Mobile","number":"06 45 78 87 87"},
{"type":"Skype","pseudo":"georgesC"},
{"type":"email","address":"georges@nespresso.com"},
{"type":"Phone","number":"01 23 66 66 67",
"obs":"standard"}
]
}
conception rules
search by a call number
{
comm:
[
{"type":"Phone","number":"01 23 45 67 89"},
{"type":"Fax","number":"01 23 45 67 88"},
{"type":"Mobile","number":"06 45 78 87 87"},
{"type":"Skype","pseudo":"georgesC"},
{"type":"email","address":"georges@nespresso.com"},
{"type":"Phone","number":"01 23 66 66 67",
"obs":"standard"}
]
}
search by a call number
{
comm:
[
{"type":"Phone","number":"01 23 45 67 89"},
{"type":"Fax","number":"01 23 45 67 88"},
{"type":"Mobile","number":"06 45 78 87 87"},
{"type":"Skype","pseudo":"georgesC"},
{"type":"email","address":"georges@nespresso.com"},
{"type":"Phone","number":"01 23 66 66 67",
"obs":"standard"}
]
}
QUERY BY ATTRIBUTE([Contact];[Contact]communication;"comm[].number";=;"01 23 45 67 88")
search by a call number
{
comm:
[
{"type":"Phone","number":"01 23 45 67 89"},
{"type":"Fax","number":"01 23 45 67 88"},
{"type":"Mobile","number":"06 45 78 87 87"},
{"type":"Skype","pseudo":"georgesC"},
{"type":"email","address":"georges@nespresso.com"},
{"type":"Phone","number":"01 23 66 66 67",
"obs":"standard"}
]
}
QUERY BY ATTRIBUTE([Contact];[Contact]communication;"comm[].number";=;"01 23 45 67 88")
search by a call number
{
comm:
[
{"type":"Phone","number":"01 23 45 67 89"},
{"type":"Fax","number":"01 23 45 67 88"},
{"type":"Mobile","number":"06 45 78 87 87"},
{"type":"Skype","pseudo":"georgesC"},
{"type":"email","address":"georges@nespresso.com"},
{"type":"Phone","number":"01 23 66 66 67",
"obs":"standard"}
]
}
QUERY BY ATTRIBUTE([Contact];[Contact]communication;"comm[].number";=;"01 23 45 67 88")
search by a call number
{
comm:
[
{"type":"Phone","number":"01 23 45 67 89"},
{"type":"Fax","number":"01 23 45 67 88"},
{"type":"Mobile","number":"06 45 78 87 87"},
{"type":"Skype","pseudo":"georgesC"},
{"type":"email","address":"georges@nespresso.com"},
{"type":"Phone","number":"01 23 66 66 67",
"obs":"standard"}
]
}
QUERY BY ATTRIBUTE([Contact];[Contact]communication;"comm[].number";=;"01 23 45 67 88")
search by a call number
{
comm:
[
{"type":"Phone","number":"01 23 45 67 89"},
{"type":"Fax","number":"01 23 45 67 88"},
{"type":"Mobile","number":"06 45 78 87 87"},
{"type":"Skype","pseudo":"georgesC"},
{"type":"email","address":"georges@nespresso.com"},
{"type":"Phone","number":"01 23 66 66 67",
"obs":"standard"}
]
}
QUERY BY ATTRIBUTE([Contact];[Contact]communication;"comm[].number";=;"01 23 45 67 88")
search by a call number
{
comm:
[
{"type":"Phone","number":"01 23 45 67 89"},
{"type":"Fax","number":"01 23 45 67 88"},
{"type":"Mobile","number":"06 45 78 87 87"},
{"type":"Skype","pseudo":"georgesC"},
{"type":"email","address":"georges@nespresso.com"},
{"type":"Phone","number":"01 23 66 66 67",
"obs":"standard"}
]
}
QUERY BY ATTRIBUTE([Contact];[Contact]communication;"comm[].number";=;"01 23 45 67 88")
search by a call number
{
comm:
[
{"type":"Phone","number":"01 23 45 67 89"},
{"type":"Fax","number":"01 23 45 67 88"},
{"type":"Mobile","number":"06 45 78 87 87"},
{"type":"Skype","pseudo":"georgesC"},
{"type":"email","address":"georges@nespresso.com"},
{"type":"Phone","number":"01 23 66 66 67",
"obs":"standard"}
]
}
QUERY BY ATTRIBUTE([Contact];[Contact]communication;"comm[].number";=;"01 23 45 67 88")
search by a call number
multi-search
{
comm:
[
{"type":"Phone","number":"01 23 45 67 89"},
{"type":"Fax","number":"01 23 45 67 88"},
{"type":"Mobile","number":"06 45 78 87 87"},
{"type":"Skype","pseudo":"georgesC"},
{"type":"email","address":"georges@nespresso.com"},
{"type":"Phone","number":"01 23 66 66 67",
"obs":"standard"}
]
}
multi-search
QUERY BY ATTRIBUTE([Contact];[Contact]communication;"comm[].number";=;"01 23 45 67 88";*)
QUERY BY ATTRIBUTE([Contact];[Contact]communication;"comm[].type";=;"Phone")
{
comm:
[
{"type":"Phone","number":"01 23 45 67 89"},
{"type":"Fax","number":"01 23 45 67 88"},
{"type":"Mobile","number":"06 45 78 87 87"},
{"type":"Skype","pseudo":"georgesC"},
{"type":"email","address":"georges@nespresso.com"},
{"type":"Phone","number":"01 23 66 66 67",
"obs":"standard"}
]
}
multi-search
QUERY BY ATTRIBUTE([Contact];[Contact]communication;"comm[].number";=;"01 23 45 67 88";*)
QUERY BY ATTRIBUTE([Contact];[Contact]communication;"comm[].type";=;"Phone")
{
comm:
[
{"type":"Phone","number":"01 23 45 67 89"},
{"type":"Fax","number":"01 23 45 67 88"},
{"type":"Mobile","number":"06 45 78 87 87"},
{"type":"Skype","pseudo":"georgesC"},
{"type":"email","address":"georges@nespresso.com"},
{"type":"Phone","number":"01 23 66 66 67",
"obs":"standard"}
]
}
multi-search
QUERY BY ATTRIBUTE([Contact];[Contact]communication;"comm[].number";=;"01 23 45 67 88";*)
QUERY BY ATTRIBUTE([Contact];[Contact]communication;"comm[].type";=;"Phone")
{
comm:
[
{"type":"Phone","number":"01 23 45 67 89"},
{"type":"Fax","number":"01 23 45 67 88"},
{"type":"Mobile","number":"06 45 78 87 87"},
{"type":"Skype","pseudo":"georgesC"},
{"type":"email","address":"georges@nespresso.com"},
{"type":"Phone","number":"01 23 66 66 67",
"obs":"standard"}
]
}
multi-search
QUERY BY ATTRIBUTE([Contact];[Contact]communication;"comm[].number";=;"01 23 45 67 88";*)
QUERY BY ATTRIBUTE([Contact];[Contact]communication;"comm[].type";=;"Phone")
{
comm:
[
{"type":"Phone","number":"01 23 45 67 89"},
{"type":"Fax","number":"01 23 45 67 88"},
{"type":"Mobile","number":"06 45 78 87 87"},
{"type":"Skype","pseudo":"georgesC"},
{"type":"email","address":"georges@nespresso.com"},
{"type":"Phone","number":"01 23 66 66 67",
"obs":"standard"}
]
}
multi-search
QUERY BY ATTRIBUTE([Contact];[Contact]communication;"comm[].number";=;"01 23 45 67 88";*)
QUERY BY ATTRIBUTE([Contact];[Contact]communication;"comm[].type";=;"Phone")
{
comm:
[
{"type":"Phone","number":"01 23 45 67 89"},
{"type":"Fax","number":"01 23 45 67 88"},
{"type":"Mobile","number":"06 45 78 87 87"},
{"type":"Skype","pseudo":"georgesC"},
{"type":"email","address":"georges@nespresso.com"},
{"type":"Phone","number":"01 23 66 66 67",
"obs":"standard"}
]
}
multi-search
QUERY BY ATTRIBUTE([Contact];[Contact]communication;"comm[].number";=;"01 23 45 67 88";*)
QUERY BY ATTRIBUTE([Contact];[Contact]communication;"comm[].type";=;"Phone")
{
comm:
[
{"type":"Phone","number":"01 23 45 67 89"},
{"type":"Fax","number":"01 23 45 67 88"},
{"type":"Mobile","number":"06 45 78 87 87"},
{"type":"Skype","pseudo":"georgesC"},
{"type":"email","address":"georges@nespresso.com"},
{"type":"Phone","number":"01 23 66 66 67",
"obs":"standard"}
]
}
multi-search
combined search
QUERY BY ATTRIBUTE([Contact];[Contact]communication;"comm[].number";=;"01 23 45 67 88";*)
combined search
QUERY BY ATTRIBUTE([Contact];[Contact]communication;"comm[].number";=;"01 23 45 67 88";*)
QUERY([Contact];[Contact]country="Argentina")
combined search
QUERY BY ATTRIBUTE([Contact];[Contact]communication;"comm[].number";=;"01 23 45 67 88";*)
QUERY([Contact];[Contact]country="Argentina")
combined search
QUERY BY ATTRIBUTE([Contact];[Contact]communication;"comm[].number";=;"01 23 45 67 88";*)
QUERY([Contact];[Contact]country="Argentina")
combined search
QUERY BY ATTRIBUTE([Contact];[Contact]communication;"comm[].number";=;"01 23 45 67 88";*)
QUERY([Contact];[Contact]country="Argentina")
combined search
QUERY BY ATTRIBUTE([Contact];[Contact]communication;"comm[].number";=;"01 23 45 67 88";*)
QUERY([Contact];[Contact]country="Argentina")
異なるクエリコマンドを連結
combined search
QUERY BY ATTRIBUTE([Contact];[Contact]communication;"comm[].number";=;"01 23 45 67 88";*)
QUERY([Contact];[Contact]country="Argentina")
異なるクエリコマンドを連結
🙂
combined search
organise data
organise data
organise data
organise data
organise data
organise data
organise data
{
"rooms": [
{"price": 56,"nb": 115,"type": "single"},
{"price": 52,"nb": 68,"type": "twin"},
{"price": 74,"nb": 24,"type": "double"},
{"price": 96,"nb": 2,"type": "suite"}
]
}
organise data
{
"rooms": [
{"price": 56,"nb": 115,"type": "single"},
{"price": 52,"nb": 68,"type": "twin"},
{"price": 74,"nb": 24,"type": "double"},
{"price": 96,"nb": 2,"type": "suite"}
]
}
{
"single_nb": 115,
"twin_nb": 68,
"double_nb": 24,
"suite_nb": 2,
"single_price": 56,
"twin_price": 52,
"double_price": 74,
"suite_price": 96
}
organise data
{
"rooms": [
{"price": 56,"nb": 115,"type": "single"},
{"price": 52,"nb": 68,"type": "twin"},
{"price": 74,"nb": 24,"type": "double"},
{"price": 96,"nb": 2,"type": "suite"}
]
}
{
"single_nb": 115,
"twin_nb": 68,
"double_nb": 24,
"suite_nb": 2,
"single_price": 56,
"twin_price": 52,
"double_price": 74,
"suite_price": 96
}
{
"price": {
"single": 56,
"twin": 52,
"double": 74,
"suite": 96
},
"nb":{
"single": 115,
"twin": 68,
"double": 24,
"suite": 2
}
}
organise data
{
"rooms": [
{"price": 56,"nb": 115,"type": "single"},
{"price": 52,"nb": 68,"type": "twin"},
{"price": 74,"nb": 24,"type": "double"},
{"price": 96,"nb": 2,"type": "suite"}
]
}
{
"single_nb": 115,
"twin_nb": 68,
"double_nb": 24,
"suite_nb": 2,
"single_price": 56,
"twin_price": 52,
"double_price": 74,
"suite_price": 96
}
{
"single": {"price": 56,"nb": 115},
"twin": {"price": 52,"nb": 68},
"double": {"price": 74,"nb": 24},
"suite": {"price": 96,"nb": 2}
}
{
"price": {
"single": 56,
"twin": 52,
"double": 74,
"suite": 96
},
"nb":{
"single": 115,
"twin": 68,
"double": 24,
"suite": 2
}
}
organise data
{
"rooms": [
{"price": 56,"nb": 115,"type": "single"},
{"price": 52,"nb": 68,"type": "twin"},
{"price": 74,"nb": 24,"type": "double"},
{"price": 96,"nb": 2,"type": "suite"}
]
}
{
"single_nb": 115,
"twin_nb": 68,
"double_nb": 24,
"suite_nb": 2,
"single_price": 56,
"twin_price": 52,
"double_price": 74,
"suite_price": 96
}
{
"single": {"price": 56,"nb": 115},
"twin": {"price": 52,"nb": 68},
"double": {"price": 74,"nb": 24},
"suite": {"price": 96,"nb": 2}
}
{
"price": {
"single": 56,
"twin": 52,
"double": 74,
"suite": 96
},
"nb":{
"single": 115,
"twin": 68,
"double": 24,
"suite": 2
}
}
organise data
{
"rooms": [
{"price": 56,"nb": 115,"type": "single"},
{"price": 52,"nb": 68,"type": "twin"},
{"price": 74,"nb": 24,"type": "double"},
{"price": 96,"nb": 2,"type": "suite"}
]
}
{
"single_nb": 115,
"twin_nb": 68,
"double_nb": 24,
"suite_nb": 2,
"single_price": 56,
"twin_price": 52,
"double_price": 74,
"suite_price": 96
}
{
"single": {"price": 56,"nb": 115},
"twin": {"price": 52,"nb": 68},
"double": {"price": 74,"nb": 24},
"suite": {"price": 96,"nb": 2}
}
{
"price": {
"single": 56,
"twin": 52,
"double": 74,
"suite": 96
},
"nb":{
"single": 115,
"twin": 68,
"double": 24,
"suite": 2
}
}
organise data
use data
{
"rooms": [
{"price": 56,"nb": 115,"type": "single"},
{"price": 52,"nb": 68,"type": "twin"},
{"price": 74,"nb": 24,"type": "double"},
{"price": 96,"nb": 2,"type": "suite"}
]
}
{
"single": {"price": 56,"nb": 115},
"twin": {"price": 52,"nb": 68},
"double": {"price": 74,"nb": 24},
"suite": {"price": 96,"nb": 2}
}
use data
{
"rooms": [
{"price": 56,"nb": 115,"type": "single"},
{"price": 52,"nb": 68,"type": "twin"},
{"price": 74,"nb": 24,"type": "double"},
{"price": 96,"nb": 2,"type": "suite"}
]
}
{
"single": {"price": 56,"nb": 115},
"twin": {"price": 52,"nb": 68},
"double": {"price": 74,"nb": 24},
"suite": {"price": 96,"nb": 2}
}
DISTINCT ATTRIBUTE PATHS ( [Hotel]rooms ; _arrayPaths )
use data
{
"rooms": [
{"price": 56,"nb": 115,"type": "single"},
{"price": 52,"nb": 68,"type": "twin"},
{"price": 74,"nb": 24,"type": "double"},
{"price": 96,"nb": 2,"type": "suite"}
]
}
{
"single": {"price": 56,"nb": 115},
"twin": {"price": 52,"nb": 68},
"double": {"price": 74,"nb": 24},
"suite": {"price": 96,"nb": 2}
}
DISTINCT ATTRIBUTE PATHS ( [Hotel]rooms ; _arrayPaths )
double
double.nb
double.price
single
single.nb
single.price
suite
suite.nb
suite.price
twin
twin.nb
twin.price
use data
{
"rooms": [
{"price": 56,"nb": 115,"type": "single"},
{"price": 52,"nb": 68,"type": "twin"},
{"price": 74,"nb": 24,"type": "double"},
{"price": 96,"nb": 2,"type": "suite"}
]
}
{
"single": {"price": 56,"nb": 115},
"twin": {"price": 52,"nb": 68},
"double": {"price": 74,"nb": 24},
"suite": {"price": 96,"nb": 2}
}
DISTINCT ATTRIBUTE PATHS ( [Hotel]rooms ; _arrayPaths )
double
double.nb
double.price
single
single.nb
single.price
suite
suite.nb
suite.price
twin
twin.nb
twin.price
rooms
use data
{
"rooms": [
{"price": 56,"nb": 115,"type": "single"},
{"price": 52,"nb": 68,"type": "twin"},
{"price": 74,"nb": 24,"type": "double"},
{"price": 96,"nb": 2,"type": "suite"}
]
}
{
"single": {"price": 56,"nb": 115},
"twin": {"price": 52,"nb": 68},
"double": {"price": 74,"nb": 24},
"suite": {"price": 96,"nb": 2}
}
DISTINCT ATTRIBUTE PATHS ( [Hotel]rooms ; _arrayPaths )
double
double.nb
double.price
single
single.nb
single.price
suite
suite.nb
suite.price
twin
twin.nb
twin.price
rooms
rooms.[]
use data
{
"rooms": [
{"price": 56,"nb": 115,"type": "single"},
{"price": 52,"nb": 68,"type": "twin"},
{"price": 74,"nb": 24,"type": "double"},
{"price": 96,"nb": 2,"type": "suite"}
]
}
{
"single": {"price": 56,"nb": 115},
"twin": {"price": 52,"nb": 68},
"double": {"price": 74,"nb": 24},
"suite": {"price": 96,"nb": 2}
}
DISTINCT ATTRIBUTE PATHS ( [Hotel]rooms ; _arrayPaths )
double
double.nb
double.price
single
single.nb
single.price
suite
suite.nb
suite.price
twin
twin.nb
twin.price
rooms
rooms.[]
rooms.[].nb
rooms.[].price
rooms.[].type
use data
{
"rooms": [
{"price": 56,"nb": 115,"type": "single"},
{"price": 52,"nb": 68,"type": "twin"},
{"price": 74,"nb": 24,"type": "double"},
{"price": 96,"nb": 2,"type": "suite"}
]
}
{
"single": {"price": 56,"nb": 115},
"twin": {"price": 52,"nb": 68},
"double": {"price": 74,"nb": 24},
"suite": {"price": 96,"nb": 2}
}
DISTINCT ATTRIBUTE PATHS ( [Hotel]rooms ; _arrayPaths )
double
double.nb
double.price
single
single.nb
single.price
suite
suite.nb
suite.price
twin
twin.nb
twin.price
rooms
rooms.[]
rooms.[].nb
rooms.[].price
rooms.[].type
rooms.length
use data
{
"single": {"price": 56,"nb": 115},
"twin": {"price": 52,"nb": 68},
"double": {"price": 74,"nb": 24},
"suite": {"price": 96,"nb": 2}
}
double
double.nb
double.price
single
single.nb
single.price
suite
suite.nb
suite.price
twin
twin.nb
twin.price
use data
{
"single": {"price": 56,"nb": 115},
"twin": {"price": 52,"nb": 68},
"double": {"price": 74,"nb": 24},
"suite": {"price": 96,"nb": 2}
}
double
double.nb
double.price
single
single.nb
single.price
suite
suite.nb
suite.price
twin
twin.nb
twin.price
use data
DISTINCT ATTRIBUTE VALUES ( [Hotel]rooms ; "single.price" ; _price )
{
"single": {"price": 56,"nb": 115},
"twin": {"price": 52,"nb": 68},
"double": {"price": 74,"nb": 24},
"suite": {"price": 96,"nb": 2}
}
double
double.nb
double.price
single
single.nb
single.price
suite
suite.nb
suite.price
twin
twin.nb
twin.price
use data
DISTINCT ATTRIBUTE VALUES ( [Hotel]rooms ; "single.price" ; _price )
{
"single": {"price": 56,"nb": 115},
"twin": {"price": 52,"nb": 68},
"double": {"price": 74,"nb": 24},
"suite": {"price": 96,"nb": 2}
}
double
double.nb
double.price
single
single.nb
single.price
suite
suite.nb
suite.price
twin
twin.nb
twin.price
use data
DISTINCT ATTRIBUTE VALUES ( [Hotel]rooms ; "single.price" ; _price )DISTINCT ATTRIBUTE VALUES ( [Hotel]rooms ; "single.price" ; _price )
{
"single": {"price": 56,"nb": 115},
"twin": {"price": 52,"nb": 68},
"double": {"price": 74,"nb": 24},
"suite": {"price": 96,"nb": 2}
}
double
double.nb
double.price
single
single.nb
single.price
suite
suite.nb
suite.price
twin
twin.nb
twin.price
use data
DISTINCT ATTRIBUTE VALUES ( [Hotel]rooms ; "single.price" ; _price )DISTINCT ATTRIBUTE VALUES ( [Hotel]rooms ; "single.price" ; _price )DISTINCT ATTRIBUTE VALUES ( [Hotel]rooms ; "rooms.[].price" ; _price )
{
"single": {"price": 56,"nb": 115},
"twin": {"price": 52,"nb": 68},
"double": {"price": 74,"nb": 24},
"suite": {"price": 96,"nb": 2}
}
double
double.nb
double.price
single
single.nb
single.price
suite
suite.nb
suite.price
twin
twin.nb
twin.price
50
51
54
55
56
65
66
67
78
80
89
…
use data
DISTINCT ATTRIBUTE VALUES ( [Hotel]rooms ; "single.price" ; _price )DISTINCT ATTRIBUTE VALUES ( [Hotel]rooms ; "single.price" ; _price )DISTINCT ATTRIBUTE VALUES ( [Hotel]rooms ; "rooms.[].price" ; _price )
{
"single": {"price": 56,"nb": 115},
"twin": {"price": 52,"nb": 68},
"double": {"price": 74,"nb": 24},
"suite": {"price": 96,"nb": 2}
}
double
double.nb
double.price
single
single.nb
single.price
suite
suite.nb
suite.price
twin
twin.nb
twin.price
50
51
54
55
56
65
66
67
78
80
89
…
use data
DISTINCT ATTRIBUTE VALUES ( [Hotel]rooms ; "single.price" ; _price )DISTINCT ATTRIBUTE VALUES ( [Hotel]rooms ; "single.price" ; _price )DISTINCT ATTRIBUTE VALUES ( [Hotel]rooms ; "rooms.[].price" ; _price )
{
"rooms": [
{"price": 56,"nb": 115,"type": "single"},
{"price": 52,"nb": 68,"type": "twin"},
{"price": 74,"nb": 24,"type": "double"},
{"price": 96,"nb": 2,"type": "suite"}
]
}
DISTINCT ATTRIBUTE VALUES ( [Hotel]rooms ; "rooms.[].price" ; _price )
rooms
rooms.[]
rooms.[].nb
rooms.[].price
rooms.[].type
rooms.length
use data
{
"rooms": [
{"price": 56,"nb": 115,"type": "single"},
{"price": 52,"nb": 68,"type": "twin"},
{"price": 74,"nb": 24,"type": "double"},
{"price": 96,"nb": 2,"type": "suite"}
]
}
DISTINCT ATTRIBUTE VALUES ( [Hotel]rooms ; "rooms.[].price" ; _price )
rooms
rooms.[]
rooms.[].nb
rooms.[].price
rooms.[].type
rooms.length
50
51
52
54
55
56
65
66
67
74
78
80
89
96
…
use data
{
"rooms": [
{"price": 56,"nb": 115,"type": "single"},
{"price": 52,"nb": 68,"type": "twin"},
{"price": 74,"nb": 24,"type": "double"},
{"price": 96,"nb": 2,"type": "suite"}
]
}
DISTINCT ATTRIBUTE VALUES ( [Hotel]rooms ; "rooms.[].price" ; _price )
rooms
rooms.[]
rooms.[].nb
rooms.[].price
rooms.[].type
rooms.length
50
51
52
54
55
56
65
66
67
74
78
80
89
96
…
use data
{
"rooms": [
{"price": 56,"nb": 115,"type": "single"},
{"price": 52,"nb": 68,"type": "twin"},
{"price": 74,"nb": 24,"type": "double"},
{"price": 96,"nb": 2,"type": "suite"}
]
}
DISTINCT ATTRIBUTE VALUES ( [Hotel]rooms ; "rooms.[].price" ; _price )
rooms
rooms.[]
rooms.[].nb
rooms.[].price
rooms.[].type
rooms.length
50
51
52
54
55
56
65
66
67
74
78
80
89
96
…
use data
{
"rooms": [
{"price": 56,"nb": 115,"type": "single"},
{"price": 52,"nb": 68,"type": "twin"},
{"price": 74,"nb": 24,"type": "double"},
{"price": 96,"nb": 2,"type": "suite"}
]
}
DISTINCT ATTRIBUTE VALUES ( [Hotel]rooms ; "rooms.[].price" ; _price )
rooms
rooms.[]
rooms.[].nb
rooms.[].price
rooms.[].type
rooms.length
50
51
52
54
55
56
65
66
67
74
78
80
89
96
…
use data
{
"rooms": [
{"price": 56,"nb": 115,"type": "single"},
{"price": 52,"nb": 68,"type": "twin"},
{"price": 74,"nb": 24,"type": "double"},
{"price": 96,"nb": 2,"type": "suite"}
]
}
DISTINCT ATTRIBUTE VALUES ( [Hotel]rooms ; "rooms.[].price" ; _price )
rooms
rooms.[]
rooms.[].nb
rooms.[].price
rooms.[].type
rooms.length
50
51
52
54
55
56
65
66
67
74
78
80
89
96
…
use data
{
"single": {"price": 56,"nb": 115},
"twin": {"price": 52,"nb": 68},
"double": {"price": 74,"nb": 24},
"suite": {"price": 96,"nb": 2}
}
use data
{
"single": {"price": 56,"nb": 115},
"twin": {"price": 52,"nb": 68},
"double": {"price": 74,"nb": 24},
"suite": {"price": 96,"nb": 2}
}
$sum := Sum ([Hotel]rooms ; "single.price")
use data
{
"single": {"price": 56,"nb": 115},
"twin": {"price": 52,"nb": 68},
"double": {"price": 74,"nb": 24},
"suite": {"price": 96,"nb": 2}
}
$sum := Sum ([Hotel]rooms ; "single.price")
$max := Max ([Hotel]rooms ; "single.price")
use data
{
"single": {"price": 56,"nb": 115},
"twin": {"price": 52,"nb": 68},
"double": {"price": 74,"nb": 24},
"suite": {"price": 96,"nb": 2}
}
$sum := Sum ([Hotel]rooms ; "single.price")
$max := Max ([Hotel]rooms ; "single.price")
$min := Min ([Hotel]rooms ; "single.price")
use data
{
"single": {"price": 56,"nb": 115},
"twin": {"price": 52,"nb": 68},
"double": {"price": 74,"nb": 24},
"suite": {"price": 96,"nb": 2}
}
$sum := Sum ([Hotel]rooms ; "single.price")
$max := Max ([Hotel]rooms ; "single.price")
$min := Min ([Hotel]rooms ; "single.price")
$average := Average ([Hotel]rooms ; "single.price")
use data
{
"rooms": [
{"price": 56,"nb": 115,"type": "single"},
{"price": 52,"nb": 68,"type": "twin"},
{"price": 74,"nb": 24,"type": "double"},
{"price": 96,"nb": 2,"type": "suite"}
]
}
use data
{
"rooms": [
{"price": 56,"nb": 115,"type": "single"},
{"price": 52,"nb": 68,"type": "twin"},
{"price": 74,"nb": 24,"type": "double"},
{"price": 96,"nb": 2,"type": "suite"}
]
}
$sum := Sum ([Hotel]rooms ; "rooms.[].nb")
use data
{
"rooms": [
{"price": 56,"nb": 115,"type": "single"},
{"price": 52,"nb": 68,"type": "twin"},
{"price": 74,"nb": 24,"type": "double"},
{"price": 96,"nb": 2,"type": "suite"}
]
}
$sum := Sum ([Hotel]rooms ; "rooms.[].nb")
$max := Max ([Hotel]rooms ; "rooms.length")
use data
a new hope
a new hope
1
a new hope
1
2 これが暗⿊⾯
a new hope
1
2
3
a new hope
1
2
3
4
a new hope
1
2
3
4
5
a new hope
1
2
3
4
5
6
a new hope
1
2
3
4
5
6
a new hope
schema-less
ビード : 折りたためる
カラー : ブラック, ブルー, レッド, ホワイト
⼨法 : 700x23
TPI : 66
チューブレス使⽤可 : いいえ
schema-less
ビード : 折りたためる
カラー : ブラック
⼨法 : 26x2.25
ETRTO : 57-559
地形 : 全地形対応型
TPI : 60
使⽤ : チューブレス対応
ビード : 折りたためる
カラー : ブラック, ブルー, レッド, ホワイト
⼨法 : 700x23
TPI : 66
チューブレス使⽤可 : いいえ
schema-less
ビード : 折りたためる
カラー : ブラック
⼨法 : 26x2.25
ETRTO : 57-559
地形 : 全地形対応型
TPI : 60
使⽤ : チューブレス対応
ビード : 折りたためる
カラー : ブラック, ブルー, レッド, ホワイト
⼨法 : 700x23
TPI : 66
チューブレス使⽤可 : いいえ
カラー : 素材⾊
スピード : 10
⻭ : 11/21, 11/23, 11/25, 11/27, 11/28, 12/23, 12/25, 12/27
schema-less
ビード : 折りたためる
カラー : ブラック
⼨法 : 26x2.25
ETRTO : 57-559
地形 : 全地形対応型
TPI : 60
使⽤ : チューブレス対応
ビード : 折りたためる
カラー : ブラック, ブルー, レッド, ホワイト
⼨法 : 700x23
TPI : 66
チューブレス使⽤可 : いいえ
カラー : 素材⾊
スピード : 10
⻭ : 11/21, 11/23, 11/25, 11/27, 11/28, 12/23, 12/25, 12/27
カラー : ブラック
レール材質 : アルミニウム
サドル⻑ : 272 mm
サドル幅 : 140 mm
シェル : フル
サイズ & レール形状 : ラウンド 7 mm
schema-less
ビード : 折りたためる
カラー : ブラック
⼨法 : 26x2.25
ETRTO : 57-559
地形 : 全地形対応型
TPI : 60
使⽤ : チューブレス対応
ビード : 折りたためる
カラー : ブラック, ブルー, レッド, ホワイト
⼨法 : 700x23
TPI : 66
チューブレス使⽤可 : いいえ
カラー : 素材⾊
スピード : 10
⻭ : 11/21, 11/23, 11/25, 11/27, 11/28, 12/23, 12/25, 12/27
カラー : ブラック
レール材質 : アルミニウム
サドル⻑ : 272 mm
サドル幅 : 140 mm
シェル : フル
サイズ & レール形状 : ラウンド 7 mm
可変取り外し : いいえ
軸材質 : スチール
本体材質 : 混合
クリート含む : はい
カラー : ブラック
スプリングテンション : 8
schema-less
ビード : 折りたためる
カラー : ブラック
⼨法 : 26x2.25
ETRTO : 57-559
地形 : 全地形対応型
TPI : 60
使⽤ : チューブレス対応
ビード : 折りたためる
カラー : ブラック, ブルー, レッド, ホワイト
⼨法 : 700x23
TPI : 66
チューブレス使⽤可 : いいえ
カラー : 素材⾊
スピード : 10
⻭ : 11/21, 11/23, 11/25, 11/27, 11/28, 12/23, 12/25, 12/27
カラー : ブラック
レール材質 : アルミニウム
サドル⻑ : 272 mm
サドル幅 : 140 mm
シェル : フル
サイズ & レール形状 : ラウンド 7 mm
可変取り外し : いいえ
軸材質 : スチール
本体材質 : 混合
クリート含む : はい
カラー : ブラック
スプリングテンション : 8
schema-less
ビード :
カラー :
⼨法 :
ETRTO :
地形 :
TPI :
使⽤ :
ビード :
カラー :
⼨法 :
TPI :
チューブレス使⽤可 :
カラー :
スピード :
⻭ :
カラー :
レール材質 :
サドル⻑ :
サドル幅 :
シェル :
サイズ & レール形状 :
可変取り外し :
軸材質 :
本体材質 :
クリート含む :
カラー :
スプリングテンション :
schema-less


ビード :
カラー :
⼨法 :
ETRTO :
地形 :
TPI :
使⽤ :
ビード :
カラー :
⼨法 :
TPI :
チューブレス使⽤可 :
カラー :
スピード :
⻭ :
カラー :
レール材質 :
サドル⻑ :
サドル幅 :
シェル :
サイズ & レール形状 :
可変取り外し :
軸材質 :
本体材質 :
クリート含む :
カラー :
スプリングテンション :








schema-less


ビード :
カラー :
⼨法 :
ETRTO :
地形 :
TPI :
使⽤ :
ビード :
カラー :
⼨法 :
TPI :
チューブレス使⽤可 :
カラー :
スピード :
⻭ :
カラー :
レール材質 :
サドル⻑ :
サドル幅 :
シェル :
サイズ & レール形状 :
可変取り外し :
軸材質 :
本体材質 :
クリート含む :
カラー :
スプリングテンション :








schema-less


ビード :
カラー :
⼨法 :
ETRTO :
地形 :
TPI :
使⽤ :
ビード :
カラー :
⼨法 :
TPI :
チューブレス使⽤可 :
カラー :
スピード :
⻭ :
カラー :
レール材質 :
サドル⻑ :
サドル幅 :
シェル :
サイズ & レール形状 :
可変取り外し :
軸材質 :
本体材質 :
クリート含む :
カラー :
スプリングテンション :








schema-less
ビード :
カラー :
⼨法 :
ETRTO :
地形 :
TPI :
使⽤ :
ビード :
カラー :
⼨法 :
TPI :
チューブレス使⽤可 :
カラー :
スピード :
⻭ :
カラー :
レール材質 :
サドル⻑ :
サドル幅 :
シェル :
サイズ & レール形状 :
可変取り外し :
軸材質 :
本体材質 :
クリート含む :
カラー :
スプリングテンション :
schema-less
ビード :
カラー :
⼨法 :
ETRTO :
地形 :
TPI :
使⽤ :
ビード :
カラー :
⼨法 :
TPI :
チューブレス使⽤可 :
カラー :
スピード :
⻭ :
カラー :
レール材質 :
サドル⻑ :
サドル幅 :
シェル :
サイズ & レール形状 :
可変取り外し :
軸材質 :
本体材質 :
クリート含む :
カラー :
スプリングテンション :
schema-less
ビード :
カラー :
⼨法 :
ETRTO :
地形 :
TPI :
使⽤ :
ビード :
カラー :
⼨法 :
TPI :
チューブレス使⽤可 :
カラー :
スピード :
⻭ :
カラー :
レール材質 :
サドル⻑ :
サドル幅 :
シェル :
サイズ & レール形状 :
可変取り外し :
軸材質 :
本体材質 :
クリート含む :
カラー :
スプリングテンション :
schema-less
ビード :
カラー :
⼨法 :
ETRTO :
地形 :
TPI :
使⽤ :
ビード :
カラー :
⼨法 :
TPI :
チューブレス使⽤可 :
カラー :
スピード :
⻭ :
カラー :
レール材質 :
サドル⻑ :
サドル幅 :
シェル :
サイズ & レール形状 :
可変取り外し :
軸材質 :
本体材質 :
クリート含む :
カラー :
スプリングテンション :
部品レコード作成時に
TechCaracteristicsフィールドに

テンプレートをコピー
schema-less
ビード :
カラー :
⼨法 :
ETRTO :
地形 :
TPI :
使⽤ :
ビード :
カラー :
⼨法 :
TPI :
チューブレス使⽤可 :
カラー :
スピード :
⻭ :
カラー :
レール材質 :
サドル⻑ :
サドル幅 :
シェル :
サイズ & レール形状 :
可変取り外し :
軸材質 :
本体材質 :
クリート含む :
カラー :
スプリングテンション :
部品レコード作成時に
TechCaracteristicsフィールドに

テンプレートをコピー
コピーは開始点に過ぎない

部品に合わせて⾃由に拡張できる
schema-less
ビード :
カラー :
⼨法 :
ETRTO :
地形 :
TPI :
使⽤ :
ビード :
カラー :
⼨法 :
TPI :
チューブレス使⽤可 :
カラー :
スピード :
⻭ :
カラー :
レール材質 :
サドル⻑ :
サドル幅 :
シェル :
サイズ & レール形状 :
可変取り外し :
軸材質 :
本体材質 :
クリート含む :
カラー :
スプリングテンション :
部品レコード作成時に
TechCaracteristicsフィールドに

テンプレートをコピー
コピーは開始点に過ぎない

部品に合わせて⾃由に拡張できる
schema-less
ビード :
カラー :
⼨法 :
ETRTO :
地形 :
TPI :
使⽤ :
ビード :
カラー :
⼨法 :
TPI :
チューブレス使⽤可 :
カラー :
スピード :
⻭ :
カラー :
レール材質 :
サドル⻑ :
サドル幅 :
シェル :
サイズ & レール形状 :
可変取り外し :
軸材質 :
本体材質 :
クリート含む :
カラー :
スプリングテンション :
部品レコード作成時に
TechCaracteristicsフィールドに

テンプレートをコピー
コピーは開始点に過ぎない

部品に合わせて⾃由に拡張できる
カラー :
レール材質 :
サドル⻑ :
サドル幅 :
シェル :
サイズ & レール形状 :
バギーショーツ着⽤:
schema-less
ビード :
カラー :
⼨法 :
ETRTO :
地形 :
TPI :
使⽤ :
ビード :
カラー :
⼨法 :
TPI :
チューブレス使⽤可 :
カラー :
スピード :
⻭ :
カラー :
レール材質 :
サドル⻑ :
サドル幅 :
シェル :
サイズ & レール形状 :
可変取り外し :
軸材質 :
本体材質 :
クリート含む :
カラー :
スプリングテンション :
部品レコード作成時に
TechCaracteristicsフィールドに

テンプレートをコピー
コピーは開始点に過ぎない

部品に合わせて⾃由に拡張できる
カラー :
レール材質 :
サドル⻑ :
サドル幅 :
シェル :
サイズ & レール形状 :
バギーショーツ着⽤:
assisted schema-less

More Related Content

Viewers also liked

Classic Query Editor
Classic Query EditorClassic Query Editor
Classic Query Editor
kmiyako
 
Auto Update
Auto UpdateAuto Update
Auto Update
kmiyako
 
Code Optimisation
Code OptimisationCode Optimisation
Code Optimisation
kmiyako
 
Inside Multi-Threading
Inside Multi-ThreadingInside Multi-Threading
Inside Multi-Threading
kmiyako
 
MONET研究会 #14
MONET研究会 #14MONET研究会 #14
MONET研究会 #14
kmiyako
 
Leaflet
LeafletLeaflet
Leaflet
kmiyako
 
初心者からプロフェッショナルまで~データベース開発ソフト4Dの魅力を徹底紹介~
初心者からプロフェッショナルまで~データベース開発ソフト4Dの魅力を徹底紹介~初心者からプロフェッショナルまで~データベース開発ソフト4Dの魅力を徹底紹介~
初心者からプロフェッショナルまで~データベース開発ソフト4Dの魅力を徹底紹介~
kmiyako
 
解決! メール送信
解決! メール送信解決! メール送信
解決! メール送信
kmiyako
 
Web area-phone-home
Web area-phone-homeWeb area-phone-home
Web area-phone-home
kmiyako
 
4D Write Pro
4D Write Pro4D Write Pro
4D Write Pro
kmiyako
 

Viewers also liked (10)

Classic Query Editor
Classic Query EditorClassic Query Editor
Classic Query Editor
 
Auto Update
Auto UpdateAuto Update
Auto Update
 
Code Optimisation
Code OptimisationCode Optimisation
Code Optimisation
 
Inside Multi-Threading
Inside Multi-ThreadingInside Multi-Threading
Inside Multi-Threading
 
MONET研究会 #14
MONET研究会 #14MONET研究会 #14
MONET研究会 #14
 
Leaflet
LeafletLeaflet
Leaflet
 
初心者からプロフェッショナルまで~データベース開発ソフト4Dの魅力を徹底紹介~
初心者からプロフェッショナルまで~データベース開発ソフト4Dの魅力を徹底紹介~初心者からプロフェッショナルまで~データベース開発ソフト4Dの魅力を徹底紹介~
初心者からプロフェッショナルまで~データベース開発ソフト4Dの魅力を徹底紹介~
 
解決! メール送信
解決! メール送信解決! メール送信
解決! メール送信
 
Web area-phone-home
Web area-phone-homeWeb area-phone-home
Web area-phone-home
 
4D Write Pro
4D Write Pro4D Write Pro
4D Write Pro
 

More from kmiyako

Build an iOS app with Ionic and 4D
Build an iOS app with Ionic and 4DBuild an iOS app with Ionic and 4D
Build an iOS app with Ionic and 4D
kmiyako
 
4D WORLD TOUR 2017
4D WORLD TOUR 20174D WORLD TOUR 2017
4D WORLD TOUR 2017
kmiyako
 
4d
4d4d
Xslt
XsltXslt
Xslt
kmiyako
 
Journaling slides
Journaling slidesJournaling slides
Journaling slides
kmiyako
 
Unicode-v11-5
Unicode-v11-5Unicode-v11-5
Unicode-v11-5
kmiyako
 
Unicode-v11-0
Unicode-v11-0Unicode-v11-0
Unicode-v11-0
kmiyako
 
アップグレードセミナー
アップグレードセミナーアップグレードセミナー
アップグレードセミナー
kmiyako
 
バックアップと復元
バックアップと復元バックアップと復元
バックアップと復元
kmiyako
 
⽇本語全⽂検索
⽇本語全⽂検索⽇本語全⽂検索
⽇本語全⽂検索
kmiyako
 
⾼解像度ディスプレイ
⾼解像度ディスプレイ⾼解像度ディスプレイ
⾼解像度ディスプレイ
kmiyako
 
ラベルエディター
ラベルエディターラベルエディター
ラベルエディター
kmiyako
 
リストフォーム⼤改造
リストフォーム⼤改造リストフォーム⼤改造
リストフォーム⼤改造
kmiyako
 
正しいクエリの書き⽅
正しいクエリの書き⽅正しいクエリの書き⽅
正しいクエリの書き⽅
kmiyako
 
カスタマイズできる⼊力画面
カスタマイズできる⼊力画面カスタマイズできる⼊力画面
カスタマイズできる⼊力画面
kmiyako
 
4D Tags
4D Tags4D Tags
4D Tags
kmiyako
 
Data conversion
Data conversionData conversion
Data conversionkmiyako
 
2010 in-depth-v11
2010 in-depth-v112010 in-depth-v11
2010 in-depth-v11
kmiyako
 

More from kmiyako (18)

Build an iOS app with Ionic and 4D
Build an iOS app with Ionic and 4DBuild an iOS app with Ionic and 4D
Build an iOS app with Ionic and 4D
 
4D WORLD TOUR 2017
4D WORLD TOUR 20174D WORLD TOUR 2017
4D WORLD TOUR 2017
 
4d
4d4d
4d
 
Xslt
XsltXslt
Xslt
 
Journaling slides
Journaling slidesJournaling slides
Journaling slides
 
Unicode-v11-5
Unicode-v11-5Unicode-v11-5
Unicode-v11-5
 
Unicode-v11-0
Unicode-v11-0Unicode-v11-0
Unicode-v11-0
 
アップグレードセミナー
アップグレードセミナーアップグレードセミナー
アップグレードセミナー
 
バックアップと復元
バックアップと復元バックアップと復元
バックアップと復元
 
⽇本語全⽂検索
⽇本語全⽂検索⽇本語全⽂検索
⽇本語全⽂検索
 
⾼解像度ディスプレイ
⾼解像度ディスプレイ⾼解像度ディスプレイ
⾼解像度ディスプレイ
 
ラベルエディター
ラベルエディターラベルエディター
ラベルエディター
 
リストフォーム⼤改造
リストフォーム⼤改造リストフォーム⼤改造
リストフォーム⼤改造
 
正しいクエリの書き⽅
正しいクエリの書き⽅正しいクエリの書き⽅
正しいクエリの書き⽅
 
カスタマイズできる⼊力画面
カスタマイズできる⼊力画面カスタマイズできる⼊力画面
カスタマイズできる⼊力画面
 
4D Tags
4D Tags4D Tags
4D Tags
 
Data conversion
Data conversionData conversion
Data conversion
 
2010 in-depth-v11
2010 in-depth-v112010 in-depth-v11
2010 in-depth-v11
 

Recently uploaded

論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
Toru Tamaki
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
Matsushita Laboratory
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
harmonylab
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
0207sukipio
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
Yuuitirou528 default
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
chiefujita1
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
Fukuoka Institute of Technology
 

Recently uploaded (14)

論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
 

Objects Fields