tree-sitter-sdml
A tree-sitter grammar for the Simple Domain Modeling Language (SDML). For more information on the language, see the documentation.
Example
module Campaign is
import [xsd skos xml:base dc]
@xml:base = <https://advertising.amazon.com/api-model>
@skos:version = xsd:decimal(2)
datatype Name <- xsd:string is
@xsd:minLength = 5
@xsd:maxLength = 25
end
datatype CampaignId <- xsd:string is
@skos:prefLabel = [
"Campaign Identifier"@en
"Identified de campagne"@fr
]
end
structure Tag is
key -> xsd:NMTOKEN
value -> {0..} rdfs:langStrings
end
entity campaign is
identity campaignId -> CampaignId
name -> Name is
@skos:definition = ""
end
tag -> {0..} Tag
ref target {0..1} -> {0..} Target
end
entity Target
end
Changes
Version: 0.1.22
- Renamed the grammar rule
type_definitiontodefinitionto address the fact that property definitions aren't types. - Renamed the grammar rule
enum_varianttovalue_variantto align withtype_varianton unions.
Version: 0.1.21
- Fixed highlighting/indent/fold for constraints.
- Added sequence builder support.
- A number of cosmetic changes to formal constraints.
Version: 0.1.19/0.1.20
- Minor change to add a field name to the '..' range operator.
Version: 0.1.18
- 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
- Constraints can 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.
- 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
end
Version: 0.1.17
- Fixed highlighting for properties.
Version: 0.1.16
- Adjusted property grammar.
- 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
end
Version: 0.1.15
- 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
end
Version: 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
end
Where 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
end
Which replaces the annotation form:
module example is
import xml
@xml:base = <https://example.org/v/example>
end
Version: 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
end
This 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.