MatchesFragmentFieldIdentifier🔗
Check that
text is a valid fragment field identifier.
A fragment field identifier points to the part of the returned data which
should be filtered,
e.g.
, $aas#assetInformation.specificAssetIds[]
or $sme.someCollection.
Code
array_index = "(0|[1-9][0-9]*)"
optional_index = f"\\[{array_index}?\\]"
reference_clause = f"keys({optional_index})?"
semantic_id_clause = f"semanticId(\\.{reference_clause})?"
supplemental_semantic_id_clause = (
f"supplementalSemanticIds({optional_index}(\\.{reference_clause})?)?"
)
specific_asset_ids_clause = (
f"specificAssetIds({optional_index}"
f"(\\.externalSubjectId(\\.{reference_clause})?)?)?"
)
submodels_clause = f"submodels({optional_index}(\\.{reference_clause})?)?"
endpoint_clause = f"endpoints({optional_index})?"
sm_descriptor_clause = (
f"({semantic_id_clause}|{supplemental_semantic_id_clause}"
f"|idShort|{endpoint_clause})"
)
submodel_descriptors_clause = (
f"submodelDescriptors({optional_index}(\\.{sm_descriptor_clause})?)?"
)
id_short = "[A-Za-z]([A-Za-z0-9_-]*[A-Za-z0-9_])?"
id_short_path_segment = f"{id_short}({optional_index})*"
id_short_path = f"{id_short_path_segment}(\\.{id_short_path_segment})*"
fields_aas = (
f"(idShort|assetInformation\\.assetType|assetInformation\\.globalAssetId"
f"|assetInformation\\.{specific_asset_ids_clause}|{submodels_clause})"
)
fields_sm = f"({semantic_id_clause}|{supplemental_semantic_id_clause}|idShort)"
fields_sme = (
f"({semantic_id_clause}|{supplemental_semantic_id_clause}"
f"|idShort|value|valueType|language)"
)
fields_aas_descriptor = (
f"(idShort|description|displayName|extension|administration"
f"|assetKind|assetType|globalAssetId|{specific_asset_ids_clause}"
f"|{endpoint_clause}|{submodel_descriptors_clause})"
)
pattern = (
f"^(\\$aas#{fields_aas}"
f"|\\$sm#{fields_sm}"
f"|\\$sme(\\.{id_short_path})?(#{fields_sme})?"
f"|\\$cd#idShort"
f"|\\$aasdesc#{fields_aas_descriptor}"
f"|\\$smdesc#{sm_descriptor_clause})$"
)
return match(pattern, text) is not None