JSON als alternatives Dateiformat für REXS
Alternativ zum bisher verwendeten xml-Dateiformat für REXS-Modelle ist es zukünftig auch möglich das JSON Format zu nutzen. Im folgenden wird für die einzelnen Elemente eines REXS-Modells dargestellt, wie diese in JSON abgebildet werden. Zum besseren Vergleich ist auch die xml-Darstellung angegeben.
Anmerkung
Die nachfolgende Spezifikation zum REXS-JSON-Dateiformat ist noch nicht Teil der offiziellen REXS 1.4 Version. Sie wurde aber vom REXS CCB freigegeben und wird ab REXS Version 1.5 Teil der Spezifikation werden.
Dateiendungen
Als Dateiendung für eine REXS-JSON Datei soll *.rexsj verwendet werden. Folgende Dateiendungen sind alternativ zulässig:
xml: *.rexs.xml
zip: *.rexs.zip
json: *.rexs.json
Modell-Objekt
Das REXS Modell ist in einem JSON-Objekt namens "model" enthalten. Dieses beinhaltet eine Reihe von Namen-Wert-Paaren. Neben den Metadaten ("version", "applicationId", "applicationVersion", "date", "applicationLanguage") enthält das "model"-Objekt die "relations" und "components" Arrays, sowie ggfs. ein "load_spectrum" Objekt.
Merkmal | Beschreibung | |
---|---|---|
Teil der REXS-Datei | version | Version der REXS Schnittstelle. Format: Hauptversionsnummer.Unterversionsnummer Beispiel: version="1.2" |
applicationId | Name der Applikation, die die XML-Datei erzeugt hat, z.B. „FVA-Workbench“. | |
applicationVersion | Version der Applikation. | |
date | Zeitpunkt zu dem die Datei erstellt wurde. Datums- und Zeitangabe nach ISO 8601 im Format „yyyy-mm-ddThh:mm:ss+<offset to UTC>“ Beispiel: 2016-06-03T11:35:17+01:00 | |
applicationLanguage | Optional: Angabe der Sprache die in der Anwendung verwendet wurde. Sprachcode nach 639-1 Beispiel: applicationLanguage="en" |
Beispiel Metadaten REXS-Datei | XML-Syntax
<model version="1.4" applicationId="FVA-Workbench" applicationVersion="7.0.0" date="2021-11-03T11:35:17+01:00" applicationLanguage="en"> <relations>...</relations> <components>...</components> <load_spectrum>...</load_spectrum> (optional) </model>
Beispiel Metadaten REXS-Datei | JSON-Syntax
{"model": { "version": "1.4", "applicationId":"FVA-Workbench", "applicationVersion":"7.0.0", "date":"2021-11-03T11:35:17+01:00", "applicationLanguage":"en", "relations": [...], "components": [...], "load_spectrum": {...} (optional) } }
"relations" Array
Das "relations" Array enthält eine Liste von JSON Objekten. Jedes dieser Objekte enthält die Namen-Wert-Paare "id" (Id der Relation), "type" (Relationstyp), "order" (bei entsprechenden Relations-typen) und das "refs" Array. Dieses enthält eine Liste von Objekten mit den Namen-Wert-Paaren "role" (Rolle der Komponente in der Relation) "id" (Id der Komponente in der Relation), "hint" (optionale Ergänzung zur besseren Lesbarkeit).
Klarstellung: In dem "refs" Array einer Relation dürfen nicht mehrere Objekte mit der gleichen Rolle vorkommen. Es ist also z.B. nicht erlaubt mehrere "part" Elemente in der gleichen assembly Relation zu verwenden. Für jedes "part" muss eine eigene Relation erstellt werden.
Nr. | Merkmal | Beschreibung | Details | |
---|---|---|---|---|
Teil der REXS-Datei | 1 | id | Eindeutiger Bezeichner der Relation in der konkrete Modellinstanz Datentyp: Integer | |
2 | type | Typ der Relation, z.B. „assembly“ Folgt der Namenskonvention Datentyp: String | Namenskonvention Relationstypen | |
3 | order | Manche Relationen (z.B. "ordered_assembly_relation") zwischen zwei Komponenten verfügen zusätzlich über eine Reihenfolge. Diese wird durch die "order" festgelegt. Dadurch ist es z.B. möglich die einzelnen Lagerreihen eines Wälzlagers eindeutig zuzuordnen. Datentyp: Integer Die kleinste "order" ist immer =1 und wird in 1er-Schritten inkrementiert. |
Nr. | Merkmal | Beschreibung | |
---|---|---|---|
Teil der REXS-Datei | 1 | id | ID einer Komponente in der Relation. Datentyp: Integer |
2 | role | Rolle der Komponente in der Relation (z.B. Stufe). Datentyp: String | |
Optional in REXS-Datei | 3 | hint | Hinweis zur besseren Lesbarkeit der Relation, z.B. Typ der referenzierten Komponente, max. 40 Zeichen |
Beispiel Relationen REXS-Datei | XML-Syntax
<relations> <relation id="15" type="ordered_assembly" order="1"> <ref id="8" role="assembly" hint="bearing"/> <ref id="16" role="part" hint="bearing_row"/> </relation> <relation id="23" type="stage"> <ref id="3" role="stage" hint="cylindrical_stage"/> <ref id="7" role="gear_1" hint="cylindrical_gear"/> <ref id="9" role="gear_2" hint="cylindrical_gear"/> </relation> </relations>
Beispiel Relationen REXS-Datei | JSON-Syntax
"relations": [ {"id":15, "type":"ordered_assembly", "order":1, "refs": [ {"id":8, "role":"assembly", "hint":"bearing"}, {"id":16, "role":"part", "hint":"bearing_row"} ] }, {"id":23, "type":"stage", "refs": [ {"id":3, "role":"stage", "hint":"cylindrical_stage"}, {"id":7, "role":"gear_1", "hint":"cylindrical_gear"}, {"id":9, "role":"gear_2", "hint":"cylindrical_gear"} ] }, ]
"components" Array
Das "components" Array enthält eine Liste von JSON Objekten. Jedes dieser Objekte enthält die Namen-Wert-Paare "id" (Id der Komponente), "name" (Bezeichnung der Komponente), "type" (Komponententyp), sowie das "attributes" Array.
Überblick über die Namen-Wert-Paare der Komponenten:
"attributes" Array
Dass "attributes" Array enthält eine Liste von Objekten mit den folgenden Namen-Wert-Paaren: "id" (Attribut-Id), "unit" (Einheit, bei bestimmten Datentypen notwendig), sowie dem Attributwert. Um eine JSON-Validierung zu ermöglichen wird dabei je nach Datentyp ein unterschiedlicher Kenner verwendet. Die verfügbaren Kenner werden im folgenden aufgelistet. Für Details zu binärcodierten Arrays und Matrizen siehe auch Arraywerte und Matrixwerte.
Datentyp | Details | JSON-Kenner | JSON Beispielwert |
---|---|---|---|
scalar | Skalare Werte | ||
boolean | true, false | boolean | false |
string | string | "NU 206" | |
integer | integer | 3 | |
floating_point | Das Gleitkomma-Zeichen ist „ . “ (Punkt). maximale Anzahl signifikanter Stellen: 15 | floating_point | 2.0 |
enum | haben einen vorgegebenen Wertebereich | enum | "both_directions" |
reference_component | Id der Referenzkomponente für die Pose-Angabe | reference_component | 1 |
file_reference | Verweis auf Datei oder Ordner (relativ oder absolut) | file_reference | "example.gde" |
array | Eindimensionales Array aus Werten | ||
floating_point_array | Das Gleitkomma-Zeichen ist „ . “ (Punkt). maximale Anzahl signifikanter Stellen: 15 | floating_point_array | [1.0,0.0,0.0] |
floating_point_array | in Binärform | floating_point_array_coded | {"code": "float32", "value": "62wRNhgQS0AAAAAAAAAAANgPsyG1MXDA"}} |
integer_array | integer_array | [1,2,3] | |
boolean_array | boolean_array | [true,false,true] | |
string_array | string_array | ["example 1","example 2"] | |
enum_array | Der Datentyp enum_array ist neu. Array von enum-Werten | enum_array | ["quad4","triangle3","quad4"] |
matrix | Zweidimensionales Array aus Werten bei dem jede Zeile die gleiche Länge hat | ||
floating_point_matrix | Das Gleitkomma-Zeichen ist „ . “ (Punkt). maximale Anzahl signifikanter Stellen: 15 | floating_point_matrix | [[1.0,0.0,0.0],[0.0,1.0,0.0],[0.0,0.0,1.0]] |
floating_point_matrix | In Binärform | floating_point_matrix_coded | {"code": "float64", "rows":100, "columns":200 "value": "MveeQZ6hM0I"}} |
integer_matrix | integer_matrix | [[1,0,0],[0,1,0],[0,0,1]] | |
boolean_matrix | boolean_matrix | [[true,false,true],[false,false,true],[true,false,false]] | |
string_matrix | string_matrix | [["example 1","example 2"],["example 3","example 4"]] | |
array_of_arrays | Zweidimensionales Array bei dem die Zeilen unterschiedliche Länge haben können | ||
array_of_integer_arrays | array_of_integer_arrays | [[1,2,3,4],[1,3,4,5,6],[7,9,11]] |
Beispiel Attributliste | JSON-Syntax
"attributes":[ {"id": "name", "string": "30203-A"}, {"id": "normal_module", "unit": "mm", "floating_point": 2.0}, {"id": "addendum_modification_coefficient", "unit": "none", "floating_point": 0.1}, {"id": "number_of_gears", "integer": 3}, {"id": "is_driving_gear", "boolean": false}, {"id": "axial_force_absorption", "enum": "both_directions" }, {"id": "u_axis_vector", "unit": "mm","floating_point_array": [1.0,0.0,0.0]}, {"id": "matrix_correction", "unit": "mm", "floating_point_matrix": [[1.0,0.0,0.0],[0.0,1.0,0.0],[0.0,0.0,1.0]] }, {"id": "example_attribute_id", "unit": "mm", "floating_point_array_coded": {"code": "float32", "value": "MveeQZ6hM0I"}}, {"id": "element_structure", "array_of_integer_arrays": [[108,2,1,107,7],[0,1,0],[0,7,0,1]]}, ]
"load_spectrum" Objekt
Das "load_spectrum" Objekt enthält die Namen-Wert-Paare "id" (Id des Lastkollektivs), "accumulation" (Submodell für akkumulierte Werte des Kollektivs), sowie das "load_cases" Array. Das "accumulation" Objekt enthält ein "components" Array. Das "load_cases" Array enthält eine Liste von JSON Objekten die jeweils eine "id" sowie ein "components" Array beinhalten.
Für Details zur Modellierungssystematik siehe auch Lastkollektive.
Beispiel Lastkollektiv | JSON-Syntax
"load_spectrum": { "id": 1, "load_cases": [ { "id": 1, "components": [ { "id": 1, "attributes": [...]}, { ... }, ... ] }, { "id": 2, "components": [ { "id": 2, "attributes": [...]}, { ... }, ... ] }, ... ] "accumulation": { "components": [ { "id": 2, "attributes": [...]}, { ... }, ... ] } }
Beispiel Modell - JSON-Syntax
Beispiel Modell | JSON-Syntax
{ "model": { "applicationId": "Bearinx", "applicationVersion": "12.0.8823", "date": "2021-07-01T12:18:38+01:00", "version": "1.3", "relations": [ { "id": 48, "type": "assembly", "refs": [ {"hint": "gear_unit","id": 1,"role": "assembly"}, {"hint": "gear_casing","id": 2,"role": "part"} ] }, { "id": 49, "type": "side", "refs": [ {"hint": "concept_bearing","id": 40,"role": "assembly"}, {"hint": "shaft","id": 13,"role": "inner_part"}, {"hint": "gear_casing","id": 2,"role": "outer_part"} ] } ... ] "components": [ { "id": 1, "name": "Transmission unit", "type": "gear_unit", "attributes": [ {"id": "example_string", "string": "30203-A"}, {"id": "example_floating_point_unit", "unit": "mm", "floating_point": 2.0}, {"id": "example_floating_point_without_unit", "unit": "none", "floating_point": 0.1}, {"id": "example_integer", "integer": 3}, {"id": "example_boolean", "boolean": false}, {"id": "example_enum", "enum": "both_directions" }, {"id": "example_floating_point_array", "unit": "mm","floating_point_array": [1.0,0.0,0.0]}, {"id": "example_floating_point_matrix", "unit": "mm", "floating_point_matrix": [[1.0,0.0,0.0], [0.0,1.0,0.0], [0.0,0.0,1.0]] }, {"id": "example_array_coded", "unit": "mm", "floating_point_array_coded": {"code": "float64", "value": "62wRNhgQS0AAAAAAAAAAANgPsyG1MXDA"}}, {"id": "example_array_of_arrays", "array_of_integer_arrays": [[108,2,1,107,7],[0,1,0],[0,7,0,1]]}, ] } { "id": 2, "name": "Input shaft", "type": "shaft", "attributes": [ ... ] } ... ] "load_spectrum": { "id": 1, "load_cases": [ { "id": 2, "components": [ { "id": 2, "attributes": [ ... ] }, { ... }, ... ] }, { ... } ] "accumulation": { "components": [ { "id": 2, "attributes": [ ... ] }, { ... }, ... ] } } } }