tree-sitter-sdml v0.3.3
Tree-Sitter grammar for SDML
A tree-sitter grammar for the Simple Domain Modeling Language (SDML). For more information on the language, see the documentation.
Example
module campaign base <https://advertising.amazon.com/api-model> is
import [dc skos xsd]
@skos:prefLabel = "Campaign sub-domain"@en
@skos:version = xsd:decimal(2)
datatype Name <- xsd:string is
@xsd:minLength = 5
@xsd:maxLength = 25
end
datatype Identifier <- opaque xsd:string is
@xsd:length = 20
end
property CampaignId -> Identifier is
@skos:prefLabel = [
"Campaign Identifier"@en
"Identified de campagne"@fr
]
@skos:description = "The globally unique identifier for a Campaign entity"@en
end
structure Tag is
key -> xsd:NMTOKEN
value -> {0..} rdfs:langStrings
end
entity Campaign is
identity ref CampaignId
name -> Name is
@skos:definition = "the name of the campaign"@en
end
tag -> {0..} Tag
target -> {1..} Target
end
entity Target
endBindings
The following bindings are built and released along with any version upgrade of the source version. The tree-sitter tool also generates bindings for C, Go, and Swift that are not built and released to any repository.
Node bindings are published to npmjs and can be installed using the npm command directly, or by making it a project dependency.
〉npm install -g tree_sitter_sdmlPython bindings are published to PyPI and can be installed using any
standard tool, such as pip.
〉pip3 install tree_sitter_sdmlRust bindings are published to crates.io and can be installed via cargo in the usual manner.
〉cargo install tree_sitter_sdmlLicense
This package is released under the Apache License, Version 2.0. See LICENSE file for details.
Changes
Version: 0.3.4
- Fix missing
bytenodes in grammar for binary literals.
Version: 0.3.3
- Build: update version of dependent packages
ccandtree-sitter.
Version: 0.3.2
- Feature: change
module's well-formedness rules to disallow the definitionsrdf_defandtype_class_defbe added to a non-library module. - Feature: remove the rule
feature_referenceentirely, and it's reference in ruletype_reference.
type_reference: $ => choice(
$.unknown_type,
$.identifier_reference,
$.builtin_simple_type,
$.mapping_type
),Version: 0.3.1
- Fix: regular expression for characters inside a string.
- Added
examples/escaped_strings.sdmfile for basic testing. - Added
test/corpus/escaped_strings.sdmfile for more complete testing.
- Added
Version: 0.3.0
- Feature: simplified property definitions.
- Removed notion of role, a
property_defis singular. - Removed "in" keyword,
property_refuses "ref". - Removed inverse names.
- Removed notion of role, a
property_def: $ => seq(
keyword('property'),
$.member_def
),- Feature: unified single definition of
member.- Changed member, is now either
property_reformember_def. - Changed
property_defto simply bemember_def. - Changed
entity_identityto bemember. - Expect to add warning for unbounded cardinality for entity identities.
- Changed member, is now either
entity_identity: $ => seq(
keyword('identity'),
$.member
),
member: $ => choice(
$.member_def,
$.property_ref,
),
member_def: $ => seq(
field('name', $.identifier),
$._type_expression_to,
optional(field('body', $.annotation_only_body))
),
property_ref: $ => seq(
keyword('ref'),
field('property', $.identifier_reference),
),Version: 0.2.14-16
- Feature: simplified form of
rdf_def.
Version: 0.2.13
- Feature: add
rdf_super_typesoptional rule tordf_def.
Version: 0.2.12
- Refactor: simplify the
rdf_thing_defrule intordf_def.
Version: 0.2.11
- Fix: rename field
uritoversion_urion rulemodule_import. - Refactor: clean-up test case names to match those in sdml-parse Rust crate.
Version: 0.2.10
- Feature: add version support to modules.
- Remove
basekeyword. - Add optional
versionkeyword and string/IRI version information. - Add optional IRI after identifier for module imports.
- Remove
Version: 0.2.8/0.2.9
- Feature: better support for RDF generation.
- Add direct support for RDF structures and properties rather than using SDML
structures.
- see file
examples/rdf_schema.sdm
- see file
- Remove keyword
"base", add new version clause on module definitions.- see file
test/corpus/module_empty_with_version.sdm
- see file
- Add direct support for RDF structures and properties rather than using SDML
structures.
Version: 0.2.7
- Remove member group from grammar, can't find a use that isn't better done by moving members to a structure of their own.
Version: 0.2.6
- Fix: test case typos.
Version: 0.2.5
- Feature: Inline type variables in type classes.
Version: 0.2.4
- Fix: tidy grammar for type classes.
Version: 0.2.3
- Feature: expand rule
sequence_of_predicate_valuesto matchsequence_of_valueswith value constructor, mapping value, and identifier reference choices. - Feature: simplify rule
value_variantto remove the assignment to an unsigned value. - Feature: change rule
feature_referenceto contain the identifier reference, update the rule_type_expression_toto have a choice offeature_referenceortype_reference. - Fix: add field
byteto rulebinaryto aid in parser and highlighting.
Along with minor changes in highlighting and examples.
Version: 0.2.2
- Feature: add rule
optionalfor the operator "?" to allow for optional values. Also added to type reference rules. - Fix: minor updates to type classes:
- Add: name
parametersto the rule referencetype_class_parametersin ruletype_class_def. - Rename: rule
type_variable_subtypetotype_variable_restriction. - Remove: wildcard from top of rule
type_variable_restriction. - Add: ability to have multiple types in a restriction separated by "+".
- Add: name
Version: 0.2.1
This release is primarily to implement type classes that allow a better description of the standard library for constraints. Adding this support identified some simplifications in functional terms and sequence builders.
module example is
class Typed(T) is
def has_type(v -> T) → Type is
@skos:definition = "Returns the SDML type of the passed value."@en
@skos:example = "~type_of(rentals:Customer) = sdml:Entity~"
end
end
end- Feature: add type classes for managing the constraint language library.
- Add: rule
type_class_defand list it as an alternative indefinition. - Add: rule
method_defand include as member oftype_class_def. - Remove: choice
wildcardfrom rulefunction_type_reference, wildcards are only allowed on type class parameters.
- Add: rule
- Feature: simplify the rule
quantified_sentenceto only have a single quantified variable binding.- Alter: field
bindinginquantified_sentenceto remove the repeat. - Alter: field
bodyfrom_quantified_bodytoconstraint_sentence. - Rename: rule
quantifier_bound_namestoquantified_variableto denote singular. - Alter: field
sourceinquantified_variableto use existingterm. - Remove: rules
type_iteratorandsequence_iterator.
- Alter: field
- Feature: simplify the structure of sequence builder to use
quantified_sentenceas body.- Alter: field
bodyin rulesequence_builderfrom_variable_bindingtosequence_builder_body. - Remove: rule
_variable_binding. - Add: rule
sequence_builder_bodywhich is simply a reference to rulequantified_sentence.
- Alter: field
- Feature: add rule
actual_arumentsfor use in rulesatomic_sentenceandfunctional_term. - Refactor: rename boolean constants.
- Rename:
_boolean_truetoboolean_truth. - Rename:
_boolean_falsetoboolean_falsity.
- Rename:
Version: 0.2.0
This is a significant refactor intended to simplify the grammar, and reduce the number of constructs used where the differentiation is not as significant as it looked previously.
- Refactor: simplify model overall, especially members and features.
- Refactor: combine by-value and by-reference member types.
- Remove: rules
member_by_valueandrole_by_value. - Rename: rule
member_by_referencetomemberandrole_by_referencetomember_role. - Remove: keyword the
reffrom rulesmemberandmember_role. - Rename: rule
identity_membertoentity_identity.
- Remove: rules
- Refactor: combine structured type groups.
- Rename: rule
structure_bodytostructured_body. - Rename: rule
structure_grouptomember_group. - Move: common parts of structure and entity bodies into common
_structured_body_innerrule.
- Rename: rule
- Refactor: move feature from a definition to a member modifier.
- Remove: rule
feature_set_def, and updatedefinitionaccordingly. - Add: optional keyword
featuresinto the rule_type_expression_to.
- Remove: rule
- Refactor: combine by-value and by-reference member types.
- Feature: add new keyword
opaqueto datatype definition. - Style: Use
:=throughout for assignment /by definition/.- Add: silent rule
_by_definition. - Alter: rules
value_variant,function_def, andconstant_defto use_by_definition.
- Add: silent rule
- Style: rename rule
_property_memberto_property_reference.
Version: 0.1.42
- Feature: simplified
featuresdefinition to be or/xor only.- Replace: separate bodies with
UnionBody. - Add: cardinality now used to determine or/xor.
- Replace: separate bodies with
FeatureSetDef
::= "features" Identifier Cardinality? UnionBody?Version: 0.1.41
- Feature: add support for features from Product Line Engineering.
- Add new definition rule
feature_set_defto ruledefinition. - Add and, or, xor bodies to
feature_set_def. - Add basic documentation to book.
- Add new definition rule
- Feature: updates to builtin simple types.
- Add the new type
unsigned. - Add the new type
binary. - Rename type
iri_referencetoiri.
- Add the new type
Version: 0.1.40
- Feature: add the Unicode character
↦to the rule_has_typewhich works better for some typesetting. - Feature: add rule for
inequationalongsideequation.- Add new rule
inequationand make it a choice withinsimple_sentence. - Add new rules for inequality relations;
not_equal,less_than,less_than_or_equal,greater_than, andgreater_than_or_equal.
- Add new rule
- Refactor: restructure rule
boolean_sentenceinto a choice ofunary_boolean_sentenceandbinary_boolean_sentence.- Add rule
unary_boolean_sentencefor negation only. - Add rule
binary_boolean_sentencefor logical connectives. - Add rules for each logical connective keyword/operator symbols.
- Add rule
- Refactor: rename field
variable_bindingtobindingin rulequantieid_sentence`. - Refactor: use the same rule for empty set in value sequences.
- Refactor: rename rule
_function_type_expression_toto_function_type. - Refactor: add rules
_has_typeand_type_restrictionand allow both ASCII and Unicode arrows.- Add rule
_has_typefor values->and→. - Add rule
_type_restrictionfor values<-and←.
- Add rule
- Fix: rules for new shared bindings had confusing names.
- Add rule
quantified_variable_binding. - Rename rule
quantifier_bindingtoquantifier_bound_names.
- Add rule
- Docs: add appendix with details of Unicode usage.
Version: 0.1.39
- Feature: allow multiple bindings at the head of quantified sentences.
- Feature: made progress on local scopes in highlighting.
- Rename rule
_constant_deftoconstant_def. - To-do: currently references are not picking up their definition formatting.
- Rename rule
- Refactor: rename rule
name_pathtofunction_composition. - Refactor: combine components of the two rules
quantified_sentenceandsequence_builder.- Add new shared rule
quantifier_binding(along with_bound_name_set) now used in both sentence and builder. - Add the ability to have more than one name in a binding.
- Add the ability for sequence builders to have more than one quantified binding.
- Change the field
expressioninto a field namedbodyof typeconstraint_sentence. - Remove rules
expressionandconjunctive_expression.
- Add new shared rule
- Style: change the order of choices in rule
predicate_valueto matchvalueand corresponding sequences.
Version: 0.1.38
- Feature: Update naming for iterators to make them consistent.
- Rename rule
iterator_targettoiterator_source. - Rename field
fromintype_iteratortosource. - Rename field
frominsequence_iteratortosource.
- Rename rule
Version: 0.1.37
- Feature: update rule
function_cardinality_expressionto allow sequence constraints.- Rename rule
any_typetowildcard. - Remove rule
any_cardinalityand replace withwildcard.
- Rename rule
- Feature: rename lists to sequences.
- Rename rule
list_of_predicate_valuestosequence_of_predicate_values. - Rename rule
list_of_valuestosequence_of_values.
- Rename rule
- Feature: make rule
property_roleprivate as_property_role. - Feature: allow sequence constraints on sequence values.
- Add rule
_sequence_value_constraints. - Add optional
_sequence_value_constraintsto rulesequence_of_predicate_values. - Add optional
_sequence_value_constraintsto rulesequence_of_values.
- Add rule
Version: 0.1.36
- Feature: alter the rule
sequence_comprehensionto be more flexible.- Rename rule
sequence_comprehensiontosequence_builder. - Rename rule
returned_valuetovariablesand re-write as a choice of: - Add rule
tuple_variableto return distinct variables. - Add rule
sequence_variableto return distinct variables as a sequence. - Add rule
mapping_variableto return two variables as a mapping.
- Rename rule
Version: 0.1.35
- Feature: alter the rule
_property_memberto allow property names to beidentifier_reference.- New interpretation, field
namein a member will be the name of a role. - Renamed keyword
in, notas. - Renamed field
roletopropertyand made it's typeidentifier_reference.
- New interpretation, field
Version: 0.1.34
- Feature: update property definitions to look more like members.
- Update rule
property_roleto be a choice of three new rules. - Add rule
identity_rolewhich is a subset ofidentity_member. - Add rule
role_by_valuewhich is a subset ofmember_by_value. - Add rule
role_by_referencewhich is a subset ofmember_by_reference.
- Update rule
Version: 0.1.33
- Feature: renamed quantifier binding targets to be more consistent.
- Rename rule
binding_targettoiterator_target. - Rename rule
binding_type_referencetotype_iteratorand field namefrom_typetofrom. - Rename rule
binding_seq_iteratortosequence_iteratorand field namefrom_sequencetofrom.
- Rename rule
- Feature: simplified the rule
environment_definitionand made naming more consistent.- Remove optional
signaturefield - Remove assignment operators
- Rename field name
rhstobodyand change to a choice offunction_defor_value_def. - Add rule
function_defto hold the signature and operators removed from the environment definition. - Rename rule
fn_parametertofunction_parameter. - Rename rule
_fn_typeto_function_type_expression_to. - Add rules
function_cardinality_expressionandany_cardinalityto capture cardinality or wildcard. - Add rule
function_type_referenceto allow wildcards.
- Remove optional
- Feature: update queries
highlights,locals, andtagsfor all changes above. Docs: update BNF syntax and diagrams for all changes above.
Version: 0.1.32
- Feature: update environment definition sequence types to use the same syntax as member type and cardinality.
Version: 0.1.31
- Feature: update highlighting queries for constraints with support for locals.
- Feature: add a
locals.scmfile with scopes for formal constraints. - Feature: add
∅(empty set) as a synonym for[]in constraints. - Fix: update the mapping value test case to use domain/range field names.
Version: 0.1.30
- Feature (minor): added field names for the domain and range of mapping types and values.
Version: 0.1.29
- Fix: an apparent regression, the value for a constructor changed from
simple_valuetovalue. This changes it back.
Version: 0.1.28
- Feature: add a mapping type and corresponding value syntax.
Version: 0.1.27
- Feature: add ordering and uniqueness constraints into the cardinality expression. Used to constrain the sequence type of a member.
Version: 0.1.26
- Feature: applied same change as 0.1.25 but for property roles as well.
Version: 0.1.25
- Feature: changed grammar for reference members:
- The production
source_cardinalityhas been removed. - The production
member_inverse_namehas been added.
- The production
Version: 0.1.24
- Feature: constraint grammar changes
- Add a language-tag to informal constraints.
- Add a wildcard type for the constraint language.
Version: 0.1.23
- Feature: add highlighting test for constraints, had to tweak a few things.
Version: 0.1.22**
- Feature: clarify rules and associated meaning.
- Rename the grammar rule
type_definitiontodefinitionto address the fact that property definitions aren't types. - Rename the grammar rule
enum_varianttovalue_variantto align withtype_varianton unions.
- Rename the grammar rule
Version: 0.1.21
- Feature: add support for sequence builder support(set builder) syntax.
- Fix: highlighting/indent/fold updated for constraints.
- Style: a number of cosmetic changes to formal constraints.
Version: 0.1.19/0.1.20
- Fix: minor change to add a field name to the '..' range operator.
Version: 0.1.18
- Feature: added a constraint assertion construct. This allows for specific
constraints to be documented for any model element.
- The grammar rule
annotationhas been renamedannotation_property - The grammar rule
constrainthas been added. - A new grammar rule named
annotationis defined as a choice ofannotation_propertyorconstraint. - This allows the use of the old rule to be subsumed by the new definition.
- The grammar rule
- Feature: constraints may now be written in informal unstructured fashion or an
embedded formalism.
- The informal representation is simply a string.
- The formal representation is a syntax that maps to a subset of ISO/IEC 24707:2018 Common Logic.
- Docs: more documentation added on the RDF mapping and the domain modeling process.
module example is
import tag
structure Thing is
inner -> {0..} InnerThing is
;; informal
assert same_tags = "All inner tags contain a tag value \"This\"."
;; formal
assert same_tags_formal is
forall self ( not_empty(self) and contains(self.tags "This") )
end
end
end
structure InnerThing is
tags -> {0..} tag:Tag
end
endVersion: 0.1.17
- Fixed: highlighting for properties.
Version: 0.1.16
- Feature: Adjusted property grammar.
- Docs: Started on property documentation.
module ddict is
import account
property accountId is
@skos:prefLabel = "accountId"@en
@skos:altLabel = "account_id"@en
identifier -> {1} account:AccountId is
@skos:definition = "Used as an identifier for account-scoped things"@en
end
reference ref {1} -> {1} account:AccountId
end
structure Account is
accountId as identifier
name -> string
end
endVersion: 0.1.15
- Feature: Added new structure to the grammar to allow data-dictionary style reusable property definitions.
module ddict is
import account
property accountId -> account:AccountId is
@skos:prefLabel = "accountId"@en
@skos:altLabel = "account_id"@en
identifier is
@skos:definition = "Used as ..."@en
end
default = {1..1}
end
structure Account is
accountId as default
name -> string
end
endVersion: 0.1.14
Added new rule named
builtin_simple_type(choice ofstring,double,decimal,integer,boolean, andiri):- replaced
identifier_referencewith new ruledata_type_basefordata_type_def, - added to the
type_referencechoice used for the membertargetfield.
- replaced
Allows both:
module example is
datatype mystring <- string
structure Person is
name -> string
age -> integer
end
endWhere the keywords string and integer will be expanded into the qualified
identifiers sdml:string and sdml:integer respectively.
Version: 0.1.13
- Added explicit
basegrammar for module rather than usingxml:baseas an attribute. - Expanded grammar for
Identifierto allow decimal digits in any position after the first. - Clarified the grammar for
TypeVariant.
Introduces:
module example base <https://example.org/v/example> is
endWhich replaces the annotation form:
module example is
import xml
@xml:base = <https://example.org/v/example>
endVersion: 0.1.12
- Fixed highlight issue for annotations with
IdentifierReferencevalues - Added field for
TypeVariantname
Version: 0.1.11
- Added a rename to optional value to
TypeVariant - Fixed
annotationandlanguage_taggrammar rule conflict
Introduces:
module example is
union Example is
Variant1
Variant1 as Alternative
end
endThis allows the use of the same type as a variant more than once if the new
identifier is unique within the same union.
Version: 0.1.10
- Cleaned up queries.
Version: 0.1.9
- Simplified the disjoint
UnionDeftype.
Version: 0.1.8
- Added a disjoint
UnionDeftype.
Version: 0.1.7
- Made field name
sourceCardinalityintosource_cardinality. - Made field name
targetCardinalityintotarget_cardinality. - Added versioning annotations
Version: 0.1.6
- Made
_simple_valueintosimple_valuenamed rule. Made
_type_referenceintotype_referencenamed rule.
Additional Links
1 year ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
2 years ago
2 years ago
3 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago