#解析器 #sdml #增量

tree-sitter-sdml

tree-sitter 解析库的 SDML 语法

55 个版本

0.3.2 2024年7月2日
0.2.16 2024年1月19日
0.2.7 2023年12月20日
0.2.6 2023年10月20日
0.1.26 2023年7月28日

37文本编辑器

32 每月下载量
用于 4 crates

Apache-2.0

495KB
17K SLoC

C 16K SLoC JavaScript 1K SLoC // 0.1% comments Scheme 262 SLoC // 0.2% comments Rust 67 SLoC // 0.2% comments

Tree-Sitter 的 SDML 语法

SDML Logo Text

Simple Domain Modeling Language (SDML) 的 tree-sitter 语法。有关该语言的更多信息,请参阅 文档

示例

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

end

绑定

以下绑定与源代码版本升级版本一起构建和发布。tree-sitter 工具还生成 C、Go 和 Swift 的绑定,这些绑定未构建和发布到任何仓库。

Node 绑定发布到 npmjs,可以使用 npm 命令直接安装,或将其作为项目依赖项。

〉npm install -g tree_sitter_sdml

Python 绑定发布到 PyPI,可以使用任何标准工具安装,例如 pip

〉pip3 install tree_sitter_sdml

Rust 绑定发布到 crates.io,可以通过 cargo 以常规方式安装。

〉cargo install tree_sitter_sdml

许可证

本软件包根据 Apache 许可证,版本 2.0 发布。有关详细信息,请参阅 LICENSE 文件。

变更

版本:0.3.2

  • 功能:更改 module良好性规则,不允许将 rdf_deftype_class_def 定义添加到非库模块。
  • 功能:完全删除规则 feature_reference,并在规则 type_reference 中的引用。
type_reference: $ => choice(
    $.unknown_type,
    $.identifier_reference,
    $.builtin_simple_type,
    $.mapping_type
),

版本:0.3.1**

  • 修复:字符串内部字符的正则表达式。
    • 添加 examples/escaped_strings.sdm 文件以进行基本测试。
    • 添加 test/corpus/escaped_strings.sdm 文件以进行更完整的测试。

版本:0.3.0

  • 功能:简化属性定义。
    • 删除了角色概念,一个 property_def 是唯一的。
    • 删除了 "in" 关键字,property_ref 使用 "ref"。
    • 删除了逆名称。
property_def: $ => seq(
    keyword('property'),
    $.member_def
),
  • 功能:统一 member 的单一定义。
    • 更改成员,现在是 either property_refmember_def
    • property_def 更改为 member_def
    • entity_identity 更改为 member
    • 预期将添加对实体标识符非约束性基数的不确定警告。
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),
),

版本:0.2.14-16

  • 功能:简化 rdf_def 的形式。

版本:0.2.13

  • 功能:向 rdf_def 添加可选规则 rdf_super_types

版本:0.2.12

  • 重构:将 rdf_thing_def 规则简化为 rdf_def

版本:0.2.11

  • 修复:将规则 module_import 中的字段 uri 重命名为 version_uri
  • 重构:清理测试用例名称以匹配 sdml-parse Rust 库中的名称。

版本:0.2.10

  • 功能:为模块添加版本支持。
    • 移除 base 关键字。
    • 添加可选的 version 关键字和字符串/IRI 版本信息。
    • 在模块导入标识符后添加可选的 IRI。

版本:0.2.8/0.2.9

  • 功能:更好地支持 RDF 生成。
    • 添加对 RDF 结构和属性的直接支持,而不是使用 SDML 结构。
      • 参见文件 examples/rdf_schema.sdm
    • 移除关键字 "base",在模块定义中添加新的版本子句。
      • 参见文件 test/corpus/module_empty_with_version.sdm

版本:0.2.7

  • 从语法中移除成员组,因为找不到更好的方法是将成员移动到它们自己的结构中。

版本:0.2.6

  • 修复:测试用例中的拼写错误。

版本:0.2.5

  • 功能:在类型类中内联类型变量。

版本:0.2.4

  • 修复:整理类型类的语法。

版本:0.2.3

  • 功能:将规则 sequence_of_predicate_values 扩展到与 sequence_of_values 匹配,包括值构造函数、映射值和标识符引用选项。
  • 功能:简化规则 value_variant 以删除对无符号值的赋值。
  • 功能:将规则 feature_reference 更改为包含标识符引用,更新规则 _type_expression_to 以有 feature_reference type_reference 的选择。
  • 修复:将字段 byte 添加到规则 binary 中,以帮助解析和突出显示。

同时还有突出显示和示例中的少量更改。

版本:0.2.2

  • 功能:为操作符 "?" 添加规则 optional 以允许可选值。也添加到类型引用规则中。
  • 修复:对类型类进行少量更新。
    • 添加:将名称 parameters 添加到规则引用 type_class_parameters 中,在规则 type_class_def 中列出。
    • 重命名:将规则 type_variable_subtype 重命名为 type_variable_restriction
    • 移除:从规则 type_variable_restriction 的顶部移除通配符。
    • 添加:在限制中使用加号分隔多个类型的能力。

版本:0.2.1

此版本主要是为了实现 类型类,允许更好地描述标准库的约束。添加此支持确定了函数术语和序列构建器的一些简化。

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

  • 功能:添加用于管理约束语言库的类型类。
    • 添加:规则 type_class_def 并将其列在 definition 中的备选方案。
    • 添加:规则 method_def 并将其包括在 type_class_def 的成员中。
    • 移除:从规则 function_type_reference 中移除选择 wildcard,通配符仅允许在类型类参数上使用。
  • 功能:简化规则 quantified_sentence 以只包含单个量词变量绑定。
    • 修改:将 quantified_sentence 中的字段 binding 修改为删除重复项。
    • 修改:字段 body_quantified_body 更改为 constraint_sentence
    • 重命名:规则 quantifier_bound_namesquantified_variable 以表示单数。
    • 修改:在 quantified_variable 中将字段 source 更改为使用现有的 term
    • 移除:规则 type_iteratorsequence_iterator
  • 特性:简化序列构建器的结构,使用 quantified_sentence 作为主体。
    • 修改:规则 sequence_builder 中的字段 body_variable_binding 更改为 sequence_builder_body
    • 移除:规则 _variable_binding
    • 添加:规则 sequence_builder_body,该规则简单地引用了规则 quantified_sentence
  • 特性:添加规则 actual_aruments 以用于规则 atomic_sentencefunctional_term
  • 重构:重命名布尔常量。
    • 重命名:将 _boolean_true 重命名为 boolean_truth
    • 重命名:将 _boolean_false 重命名为 boolean_falsity

版本:0.2.0

这是一次重大的重构,旨在简化语法,并减少之前看起来不太显著的区分所使用的结构数量。

  • 重构:整体简化模型,特别是成员和特性。
    • 重构:合并按值和按引用的成员类型。
      • 移除:规则 member_by_valuerole_by_value
      • 重命名:将规则 member_by_reference 重命名为 member,将 role_by_reference 重命名为 member_role
      • 移除:从规则 membermember_role 中移除关键字 ref
      • 重命名:将规则 identity_member 重命名为 entity_identity
    • 重构:合并结构化类型组。
      • 重命名:将规则 structure_body 重命名为 structured_body
      • 重命名:将规则 structure_group 重命名为 member_group
      • 移动:将结构和实体主体的公共部分移动到公共 _structured_body_inner 规则。
    • 重构:将特性从定义移动到成员修饰符。
      • 移除:规则 feature_set_def,并相应更新 definition
      • 添加:将可选关键字 features 添加到规则 _type_expression_to 中。
  • 特性:在数据类型定义中添加新关键字 opaque
  • 风格:在整个文档中统一使用 := 用于赋值/定义。
    • 添加:静默规则 _by_definition
    • 修改:修改规则 value_variantfunction_defconstant_def 以使用 _by_definition
  • 风格:将规则 _property_member 重命名为 _property_reference

版本:0.1.42

  • 特性:简化 features 定义,使其仅限于或/异或。
    • 替换:使用 UnionBody 分隔独立的主体。
    • 添加:现在使用基数来确定或/异或。
FeatureSetDef
    ::= "features" Identifier Cardinality? UnionBody?

版本:0.1.41

  • 特性:添加对产品线工程特性支持。
    • 向规则 definition 中添加新的定义规则 feature_set_def
    • feature_set_def 中添加 异或 主体。
    • 向手册添加基本文档。
  • 特性:内置简单类型更新。
    • 添加新类型 unsigned
    • 添加新类型 binary
    • 将类型 iri_reference 重命名为 iri

版本:0.1.40

  • 特性:将Unicode字符 添加到规则 _has_type 中,以提高某些排版的兼容性。
  • 特性:在 equation 旁边添加 inequation 规则。
    • 添加新规则 inequation 并使其成为 simple_sentence 中的一个选择。
    • 添加不平等关系的规则;not_equalless_thanless_than_or_equalgreater_thangreater_than_or_equal
  • 重构:将规则 boolean_sentence 重新结构化为 unary_boolean_sentencebinary_boolean_sentence 的选择。
    • 添加规则 unary_boolean_sentence 仅用于否定。
    • 添加规则 binary_boolean_sentence 用于逻辑连接词。
    • 添加每个逻辑连接词的关键字/操作符符号的规则。
  • 重构:将字段 variable_binding 重命名为 ``bindingin rulequantieid_sentence`。
  • 重构:使用相同的规则在值序列中的空集中。
  • 重构:将规则 _function_type_expression_to 重命名为 _function_type
  • 重构:添加规则 _has_type_type_restriction 并允许ASCII和Unicode箭头。
    • 添加规则 _has_type 用于值 ->
    • 添加规则 _type_restriction 用于值 <-
  • 修复:新共享绑定的规则名称令人困惑。
    • 添加规则 quantified_variable_binding
    • 将规则 quantifier_binding 重命名为 quantifier_bound_names
  • 文档:添加包含Unicode使用详细信息的附录。

版本:0.1.39

  • 特性:允许在量词句子开头有多个绑定。
  • 特性:在突出显示中处理局部作用域方面取得进展。
    • 将规则 _constant_def 重命名为 constant_def
    • 待办事项:当前引用没有获取它们的定义格式。
  • 重构:将规则 name_path 重命名为 function_composition
  • 重构:合并两个规则 quantified_sentencesequence_builder 的组件。
    • 添加新共享规则 quantifier_binding(附带 _bound_name_set),现在在句子和构建器中都使用。
    • 添加在绑定中可以有多个名称的能力。
    • 添加序列构建器可以有多个量词绑定的能力。
    • 将字段 expression 改名为 body,类型为 constraint_sentence
    • 删除规则 expressionconjunctive_expression
  • 样式:更改规则 predicate_value 中选择顺序以匹配 value 和相应的序列。

版本:0.1.38

  • 特性:更新迭代器的命名以使其一致。
    • 将规则 iterator_target 重命名为 iterator_source
    • type_iterator 中的字段 from 重命名为 source
    • sequence_iterator 中的字段 from 重命名为 source

版本:0.1.37

  • 特性:更新规则 function_cardinality_expression 以允许序列约束。
    • 将规则 any_type 重命名为 wildcard
    • 删除规则 any_cardinality 并用 wildcard 替换。
  • 特性:将列表重命名为序列。
    • 将规则 list_of_predicate_values 重命名为 sequence_of_predicate_values
    • 将规则 list_of_values 重命名为 sequence_of_values
  • 特性:将规则 property_role 作为私有规则重命名为 _property_role
  • 特性:允许在序列值上使用序列约束。
    • 添加规则 _sequence_value_constraints
    • 将可选的 _sequence_value_constraints 添加到规则 sequence_of_predicate_values
    • 将可选的 _sequence_value_constraints 添加到规则 sequence_of_values

版本:0.1.36

  • 特性:使规则 sequence_comprehension 更加灵活。
    • 将规则 sequence_comprehension 重命名为 sequence_builder
    • 将规则 returned_value 重命名为 variables 并重新编写为选择
    • 添加规则 tuple_variable 以返回不同的变量。
    • 添加规则 sequence_variable 以序列形式返回不同的变量。
    • 添加规则 mapping_variable 以映射形式返回两个变量。

版本:0.1.35

  • 特性:修改规则 _property_member 以允许属性名称为 identifier_reference
    • 新的解释,成员中的字段 name 将是角色的名称。
    • 重命名关键字 in,而不是 as
    • 将字段 role 重命名为 property 并将其类型重命名为 identifier_reference

版本:0.1.34

  • 特性:更新属性定义,使其更像成员。
    • 更新规则 property_role 以成为三个新规则的选择。
    • 添加规则 identity_role,它是 identity_member 的子集。
    • 添加规则 role_by_value,它是 member_by_value 的子集。
    • 添加规则 role_by_reference,它是 member_by_reference 的子集。

版本:0.1.33

  • 特性:将量词绑定目标重命名为更一致的形式。
    • 将规则 binding_target 重命名为 iterator_target
    • 将规则 binding_type_reference 重命名为 type_iterator 并将字段名 from_type 重命名为 from
    • 将规则 binding_seq_iterator 重命名为 sequence_iterator 并将字段名 from_sequence 重命名为 from
  • 特性:简化了规则 environment_definition 并使命名更一致。
    • 删除可选的 signature 字段
    • 删除赋值运算符
    • 将字段名 rhs 重命名为 body 并将其更改为 function_def_value_def 的选择。
    • 添加规则 function_def 以保存从环境定义中删除的签名和运算符。
    • 将规则 fn_parameter 重命名为 function_parameter
    • 将规则 _fn_type 重命名为 _function_type_expression_to
    • 添加规则 function_cardinality_expressionany_cardinality 以捕获基数或通配符。
    • 添加规则 function_type_reference 允许使用通配符。
  • 特性:更新所有上述更改的查询 highlightslocalstags
  • 文档:更新所有上述更改的 BNF 语法和图表。

版本:0.1.32

  • 特性:更新环境定义序列类型,使其与成员类型和基数使用相同的语法。

版本:0.1.31

  • 特性:更新具有对 locals 支持的约束高亮查询。
  • 特性:添加一个 locals.scm 文件,用于正式约束的作用域。
  • 特性:在约束中添加 (空集)作为 [] 的同义词。
  • 修复:更新映射值测试用例,使用域/范围字段名。

版本:0.1.30

  • 特性(较小):为映射类型和值添加了域和范围字段名。

版本:0.1.29

  • 修复:一个明显的回归,构造函数的值从 simple_value 更改为 value。现在将其改回。

版本:0.1.28

  • 特性:添加映射类型和相应的值语法。

版本:0.1.27

  • 特性:将 排序唯一性 约束添加到基数表达式中。用于约束成员的序列类型。

版本:0.1.26

  • 特性:对 0.1.25 中的更改进行了相同的修改,但针对属性角色。

版本:0.1.25

  • 特性:更改了引用成员的语法。
    • 已删除生成规则 source_cardinality
    • 已添加生成规则 member_inverse_name

版本:0.1.24

  • 特性:约束语法更改
    • 为非正式约束添加一个 语言标记
    • 为约束语言添加一个 通配符类型

版本:0.1.23

  • 特性:添加约束高亮测试,必须调整一些事情。

版本:0.1.22**

  • 特性:阐明规则及其相关含义。
    • 将语法规则 type_definition 重命名为 definition,以解决属性定义不是类型的事实。
    • 将语法规则 enum_variant 重命名为 value_variant,以与 type_variant 上的联合保持一致。

版本:0.1.21

  • 特性:添加对序列构建器支持(集合构建器)语法的支持。
  • 修复:更新约束的突出显示/缩进/折叠。
  • 样式:对正式约束进行了多项外观更改。

版本:0.1.19/0.1.20

  • 修复:对 '..' 范围运算符添加一个字段名的小改动。

版本:0.1.18

  • 特性:添加约束断言构造。这允许为任何模型元素记录特定的约束。
    • 已重命名语法规则 annotationannotation_property
    • 已添加语法规则 constraint
    • 定义了一个新的语法规则 annotation,作为 annotation_propertyconstraint 的选择。
    • 这允许使用旧规则被新定义所包含。
  • 特性:约束现在可以以非正式的非结构化方式或嵌入的形式编写。
    • 非正式表示仅是一个字符串。
    • 正式表示是一种映射到 ISO/IEC 24707:2018 常见逻辑子集的语法。
  • 文档:增加了关于 RDF 映射和域建模过程的更多文档。
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

版本:0.1.17

  • 修复:属性的高亮显示。

版本:0.1.16

  • 功能:调整了属性语法。
  • 文档:开始编写属性文档。
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

版本:0.1.15

  • 功能:在语法中添加了新的结构,以允许数据字典样式的可重用属性定义。
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

版本:0.1.14

  • 添加了名为 builtin_simple_type 的新规则(选择 stringdoubledecimalintegerbooleaniri)。
    • identifier_reference 替换为新的规则 data_type_base,用于 data_type_def
    • 添加到 type_reference 的选择中,该选择用于成员 target 字段。

允许两种

module example is

  datatype mystring <- string
  
  structure Person is
    name -> string
    age -> integer
  end
end

其中关键字 stringinteger 分别展开为限定标识符 sdml:stringsdml:integer

版本:0.1.13

  • 为模块添加了显式的 base 语法,而不是使用 xml:base 作为属性。
  • Identifier 的语法扩展到允许在第一个位置之后的任何位置使用十进制数字。
  • 明确了 TypeVariant 的语法。

引入

module example base <https://example.org/v/example> is
end

它取代了注释形式

module example is
  import xml
  
  @xml:base = <https://example.org/v/example>
end

版本:0.1.12

  • 修复了具有 IdentifierReference 值的注释的高亮问题
  • TypeVariant 添加了名称字段

版本:0.1.11

  • 将可选值重命名为 TypeVariant
  • 修复了 annotationlanguage_tag 语法规则冲突

引入

module example is

  union Example is
    Variant1
    Variant1 as Alternative
  end
end

这允许在 union 中具有唯一的新标识符的情况下,将同一类型作为变体多次使用。

版本:0.1.10

  • 清理了查询。

版本:0.1.9

  • 简化了不交集的 UnionDef 类型。

版本:0.1.8

  • 添加了不交集的 UnionDef 类型。

版本:0.1.7

  • 将字段名称 sourceCardinality 改为 source_cardinality
  • 将字段名称 targetCardinality 改为 target_cardinality
  • 添加了版本注释

版本:0.1.6

  • _simple_value 改为 simple_value 命名规则。
  • _type_reference 改为 type_reference 命名规则。

依赖项

~2.7–4MB
~71K SLoC