26 releases
new 0.4.0 | Nov 15, 2024 |
---|---|
0.3.0 | Sep 1, 2024 |
0.2.17 | Jun 28, 2024 |
0.2.15 | Feb 21, 2024 |
0.1.6 | Jul 28, 2023 |
#7 in #sdml
131 downloads per month
Used in 4 crates
770KB
18K
SLoC
Package sdml-core
Rust in-Memory model of the Simple Domain Modeling Language (SDML).
This package is part of the Rust SDML project and specifically defines the in-memory model of an SDML module. The project's intent is to provide an idiomatic implementation of the in-memory model, parser, generators, and the CLI tool.
The following figure demonstrates this package in the broader project context.
Note that other tools can use the =sdml_core= API to create or manipulate models.
Changes
Version 0.4.0
The primary aim of this release is to introduce a new definition type, a dimension. This may be seen as a violation of SDML's goal of being technology or implementation independent however it is a pragmatic decision based on usage experience. Modeling the data managed by a business in terms of entities solves many operational purposes but ignores a major purpose of this data -- reporting.
module example is
import [ sales stores xsd ]
dimension Region is
;; define an identifier for this dimension
identity region -> long
;; add members
name -> string
end
dimension Location is
;; tightly bind this dimension to the Sale entity
source sales:Sale
;; define a hierarchy by noting one or more parent dimensions
parent region -> Region
;; reuse members from the source entity
store from sales:Sale
city from sales:Sale
;; add additional members not on the source entity
state -> stores:State
country -> stores:Country
end
end
Detailed Changes:
- Add new
DimensionDef
to the model which has a source clause, set of parents and set of members. - Add a
source
claused based on, but extending, the one on an event definition. - Add new
DimensionParent
structure with name and entity name reference.
The new syntax for the source
keyword also allows the inclusion of members from
the source entity rather than requiring duplicate members. This new source
clause has been added to the event definition as a part of the body of an event
thus allowing incomplete event definitions.
module example is
entity Thing is
identity id -> long
name -> string
end
event Empty
event NewThing is
source Thing with name
end
end
Additionally, this version of the grammar allows module's to rename imports,
both modules and members. This allows then client module to avoid always using
qualified names, and to use short, or more meaningful, names as appropriate.
``` sdml
module example is
import rentals_billing as billing
import billing:Invoice as Invoice
end
Version 0.3.1
- Feature: move use of tree-sitter crate behind a feature.
- Feature: added iterators to trait
ModuleStore
.
Version 0.3.0
- Feature: update for the latest grammar.
- Updated
Member
to be a union ofMemberDef
andIdentifierReference~
- Updated entity
identity
to be just aMember
. - Updated
PropertyDef
to be a wrapper aroundMemberDef
. - Fixed corresponding validation rules.
- Updated
- Refactor: simplified the walker/visitor to pass model members rather than de-constructing them.
- Refactor: renamed and made some changes in the
cache
(nowstore
) andload
modules.
Version 0.2.17
- Feature: inverted the logic for determining whether a definition is incomplete.
- Rename: trait
MaybeInvalid
toMaybeIncomplete
.
- Rename: trait
- Feature: added method
has_source
to the traitModuleLoader
. - Feature: added implementation of FromStr
for both
QualifiedReferenceand
IdentifierReference`. - Build: bump version of sdml-errors.
Version 0.2.16
Version 0.2.15
- Fix:
Identifier::from_str
should allow type names.
Version 0.2.14
- Feature: add new
ModuleStore
trait, implemented byModuleCache
.
While not advantageous immediately, it mirrors the separation of trait and implementation that worked well for
ModuleLoader
and ModuleResolver
.
Version 0.2.13
- Feature: add new validation for
IdentifierNotPreferredCase
, to enforce case conventions.
Version 0.2.12
- Feature: more term validation, mainly to reduce the number of
todo!
panics.
Version 0.2.11
- Refactor: moved errors and diagnostics to new crate
sdml_error
. - Feature: started on diagnostics and verification, working but incomplete.
- Added: =deprecated= terminology validation.
Version 0.2.10
- Feature: Add new stdlib modules
iso_3166
for country codes, andiso_4217
for currency codes. - Style: Shortened stdlib constant names for readability.
- Fix: Correct the regex for identifiers, now in sync with the grammar.
Version 0.2.9
- Fix: Cardinality parser set incorrect default values.
- Update: the
with_
constructors onCardinality
to take option types.
- Update: the
Version 0.2.8
- Feature: Add more to the SDML standard library module as needed for RDF generator.
Version 0.2.7
Clean-up release.
- Added new
import!
macro for stdlib modules. - Removed debugging
println!
calls. - Fixed compiler warnings and fmt issues.
Version 0.2.6
- Feat: Added more to the
sdml
stdlib module. - Feat: Added helpers
is_stdlib_property
andis_datatype_facet
toAnnotationProperty
. - Feat: Added new
AnnotationBuilder
trait and impls on most definitions to allow easy adding of annotation properties. - Feat: Added helper methods to
ModuleCache
to make it more collection-like.
Version 0.2.5
- Feature: Implemented the core standard library modules.
dc
(elements) -- Complete.dc_terms
-- Not started.dc_am
-- Not started.dc_type
-- Not started.owl
-- Complete.rdf
-- Complete.rdfs
-- Complete.sdml
-- Mostly complete.skos
-- Complete.xsd
(part 2) -- Complete.
This change affects the =ModuleCache= as well, it's with_stdlib
constructor will include all the library modules and their
definitions. This can be checked out with the command-line tool to either draw diagrams of the standard library modules
or convert into s-expressions, etc.
Version 0.2.4
- Feature: add new stdlib modules with standard layout.
- Feature: minor refactor of cache and loader.
Version 0.2.3
- Feature: Update to latest grammar for version URIs and RDF definitions.
Version 0.2.2
- Feature: Add initial support for versioned modules.
- Remove
base
keyword. - Add new optional
version
keyword after module URI with:- optional version string that becomes
owl:versionInfo
. - version URI that becomes
owl:verionIRI
.
- optional version string that becomes
- Remove
- Feature: Add new RDF structure/property definitions.
- Add new keyword
rdf
followed by either =structure= or =property= with name and annotation body. - Extended
SimpleModuleWalker
with support for RDF class/property definitions.
- Add new keyword
Version 0.2.1
- Feature: Remove member groups.
Version 0.2.0
- Feature: Update to latest grammar.
- Remove Value Variant numeric values.
- Update formal constraints.
- Add type classes.
Version 0.1.11
- Feature: Update
Cardinality::to_uml_string
to output constraints. - Fix: Missing features in mapping types and values.
Version 0.1.10
- Feature: Added support for
mapping_type
andmapping_value
rules.
Version 0.1.9
- Style: Run Cargo format and clippy.
Version 0.1.8
- Feature: Made the name for constraints required, not
Option
. - Style: Remove most macros from the model.
Version 0.1.7
- Fix: Minor fixes.
Version 0.1.6
- Build: Updated parser with grammar changes in =tree-sitter-sdml= version
0.1.29
Version 0.1.6
- Build: Updated parser with grammar changes in =tree-sitter-sdml= version
0.1.26
Version 0.1.5
- Created a
stdlib
module and moved all the SDML and relevant RDF files into it. - Updated model to the same level as
tree-sitter-sdml
version0.1.21
. - Updated
tree-sitter-sdml
dependency with updated constraints.- Renamed
TypeDefinition
to =Definition= to address the fact that property definitions aren't types. - Renamed
EnumVariant
toValueVariant
to align withTypeVariant
on unions. This required change to walker methods.
- Renamed
Version 0.1.4
Previously part of a single crate sdml.
Dependencies
~15–24MB
~324K SLoC