\n","children":[{"type":"text","text":""}]},{"type":"p","children":[{"type":"text","text":"Our declarative modeling language Rel now supports modules!"}]},{"type":"p","children":[{"type":"text","text":"A module groups together one or more declarations. For instance"}]},{"type":"code_block","lang":"rel","value":"module person\n def name = \"Sherlock Holmes\"\n module address\n def street = \"221B Baker Street\"\n def city = \"London\"\n def country = \"UK\"\n end\n def telephone = \"+44 202-456-1111\"\nend","children":[{"type":"text","text":""}]},{"type":"p","children":[{"type":"text","text":"This will display as below:"}]},{"type":"code_block","lang":"rel","value":"def output = person[:address][:street]","children":[{"type":"text","text":""}]},{"type":"p","children":[{"type":"text","text":"Relation: "},{"type":"text","text":"\"221B Baker Street\"","code":true}]},{"type":"p","children":[{"type":"text","text":"Modules can be imported into a lexical scope using the "},{"type":"text","text":"with","code":true},{"type":"text","text":" construct, allowing the use of short names. The "},{"type":"text","text":"with","code":true},{"type":"text","text":" construct can also be used to rename imported members."}]},{"type":"code_block","lang":"rel","value":"with person use name, telephone as phone\nwith person:address use street\ndef output = name\ndef output = phone\ndef output = street","children":[{"type":"text","text":""}]},{"type":"p","children":[{"type":"text","text":"Relation:"}]},{"type":"code_block","lang":"rel","value":"module person\n def name = \"Sherlock Holmes\"\n module address\n def street = \"221B Baker Street\"\n def city = \"London\"\n def country = \"UK\"\n end\n def telephone = \"+44 202-456-1111\"\nend\nwith person use name, telephone as phone\nwith person:address use street\ndef output = name\ndef output = phone\ndef output = street","children":[{"type":"text","text":""}]},{"type":"html","value":" ","children":[{"type":"text","text":""}]},{"type":"p","children":[{"type":"text","text":"Modules are relations and computations can be performed over them like any other relation:"}]},{"type":"code_block","lang":"rel","value":"def person_without_phone(key, values...) =\n person(key, values...) and\n key != :telephone\ndef output = json_string[person_without_phone]","children":[{"type":"text","text":""}]},{"type":"p","children":[{"type":"text","text":"Relation:"}]},{"type":"code_block","lang":"rel","value":"\" { \"address\": { \"city\": \"London\", \"country\": \"UK\", \"street\": \"221B Baker Street\" }, \"name\": \"Sherlock Holmes\" }\"","children":[{"type":"text","text":""}]},{"type":"p","children":[{"type":"text","text":"For a more detailed introduction to modules, see the "},{"type":"a","url":"https://docs.relational.ai/rel/concepts/modules","title":null,"children":[{"type":"text","text":"documentation"}]},{"type":"text","text":"."}]}],"_content_source":{"queryId":"src/content/resources/rel-modules.mdx","path":["resource","body"]}},"_content_source":{"queryId":"src/content/resources/rel-modules.mdx","path":["resource"]}}},"errors":null,"query":"\n query resource($relativePath: String!) {\n resource(relativePath: $relativePath) {\n ... on Document {\n _sys {\n filename\n basename\n breadcrumbs\n path\n relativePath\n extension\n }\n id\n }\n ...ResourceParts\n }\n}\n \n fragment ResourceParts on Resource {\n __typename\n title\n description\n date\n image\n categories\n authors {\n __typename\n name\n link\n }\n seo {\n __typename\n keywords\n description\n image\n image_alt\n canonical_url\n author\n published\n modified\n language\n robots\n site_name\n content_type\n }\n body\n}\n ","variables":{"relativePath":"rel-modules.mdx"}},"src/content/meta/meta.md":{"data":{"meta":{"_sys":{"filename":"meta","basename":"meta.md","breadcrumbs":["meta"],"path":"src/content/meta/meta.md","relativePath":"meta.md","extension":".md"},"id":"src/content/meta/meta.md","__typename":"Meta","banner":{"__typename":"MetaBanner","enabled":true,"content":{"type":"root","children":[{"type":"p","children":[{"type":"text","text":"Check out "},{"type":"a","url":"/resources/highlights-of-relationalai-at-snowflake-data-cloud-summit-2024","title":"SF summit highlights","children":[{"type":"text","text":"highlights"}]},{"type":"text","text":" of RelationalAI at "},{"type":"text","text":"Snowflake's Data Cloud Summit 2024!","bold":true}]}],"_content_source":{"queryId":"src/content/meta/meta.md","path":["meta","banner","content"]}},"_content_source":{"queryId":"src/content/meta/meta.md","path":["meta","banner"]}},"header":{"__typename":"MetaHeader","links":[{"__typename":"MetaHeaderLinks","text":"Product","url":"/product","style":"default","_content_source":{"queryId":"src/content/meta/meta.md","path":["meta","header","links",0]}},{"__typename":"MetaHeaderLinks","text":"Company","url":"/company","style":"default","_content_source":{"queryId":"src/content/meta/meta.md","path":["meta","header","links",1]}},{"__typename":"MetaHeaderLinks","text":"Docs","url":"/docs","style":"default","_content_source":{"queryId":"src/content/meta/meta.md","path":["meta","header","links",2]}},{"__typename":"MetaHeaderLinks","text":"Resources","url":"/resources/all/1","style":"default","_content_source":{"queryId":"src/content/meta/meta.md","path":["meta","header","links",3]}},{"__typename":"MetaHeaderLinks","text":"Get Started","url":"/get-started","style":"cta","_content_source":{"queryId":"src/content/meta/meta.md","path":["meta","header","links",4]}}],"_content_source":{"queryId":"src/content/meta/meta.md","path":["meta","header"]}},"footer":{"__typename":"MetaFooter","sections":[{"__typename":"MetaFooterSections","name":"Product","links":[{"__typename":"MetaFooterSectionsLinks","text":"Overview","url":"/product","_content_source":{"queryId":"src/content/meta/meta.md","path":["meta","footer","sections",0,"links",0]}},{"__typename":"MetaFooterSectionsLinks","text":"Use Cases","url":"/product#for-problems-that-matter","_content_source":{"queryId":"src/content/meta/meta.md","path":["meta","footer","sections",0,"links",1]}},{"__typename":"MetaFooterSectionsLinks","text":"Capabilities","url":"/product#a-new-toolset","_content_source":{"queryId":"src/content/meta/meta.md","path":["meta","footer","sections",0,"links",2]}}],"_content_source":{"queryId":"src/content/meta/meta.md","path":["meta","footer","sections",0]}},{"__typename":"MetaFooterSections","name":"Resources","links":[{"__typename":"MetaFooterSectionsLinks","text":"Documentation","url":"/docs/getting_started","_content_source":{"queryId":"src/content/meta/meta.md","path":["meta","footer","sections",1,"links",0]}},{"__typename":"MetaFooterSectionsLinks","text":"News","url":"/resources/news/1","_content_source":{"queryId":"src/content/meta/meta.md","path":["meta","footer","sections",1,"links",1]}},{"__typename":"MetaFooterSectionsLinks","text":"Research","url":"/resources/research/1","_content_source":{"queryId":"src/content/meta/meta.md","path":["meta","footer","sections",1,"links",2]}},{"__typename":"MetaFooterSectionsLinks","text":"Releases","url":"/resources/releases/1","_content_source":{"queryId":"src/content/meta/meta.md","path":["meta","footer","sections",1,"links",3]}}],"_content_source":{"queryId":"src/content/meta/meta.md","path":["meta","footer","sections",1]}},{"__typename":"MetaFooterSections","name":"About Us","links":[{"__typename":"MetaFooterSectionsLinks","text":"Our Company","url":"/company","_content_source":{"queryId":"src/content/meta/meta.md","path":["meta","footer","sections",2,"links",0]}},{"__typename":"MetaFooterSectionsLinks","text":"Contact Us","url":"/get-started","_content_source":{"queryId":"src/content/meta/meta.md","path":["meta","footer","sections",2,"links",1]}},{"__typename":"MetaFooterSectionsLinks","text":"Careers","url":"/careers","_content_source":{"queryId":"src/content/meta/meta.md","path":["meta","footer","sections",2,"links",2]}},{"__typename":"MetaFooterSectionsLinks","text":"Legal","url":"/legal","_content_source":{"queryId":"src/content/meta/meta.md","path":["meta","footer","sections",2,"links",3]}},{"__typename":"MetaFooterSectionsLinks","text":"GDPR","url":"/gdpr","_content_source":{"queryId":"src/content/meta/meta.md","path":["meta","footer","sections",2,"links",4]}},{"__typename":"MetaFooterSectionsLinks","text":"Security & Trust","url":"https://trust.relational.ai/","_content_source":{"queryId":"src/content/meta/meta.md","path":["meta","footer","sections",2,"links",5]}}],"_content_source":{"queryId":"src/content/meta/meta.md","path":["meta","footer","sections",2]}}],"socials":[{"__typename":"MetaFooterSocials","text":"GitHub","url":"https://github.com/RelationalAI","icon":"https://assets.tina.io/91d76337-e55d-4722-acb5-3106adb895b6/img/logos/github.png","_content_source":{"queryId":"src/content/meta/meta.md","path":["meta","footer","socials",0]}},{"__typename":"MetaFooterSocials","text":"LinkedIn","url":"https://www.linkedin.com/company/relationalai/about","icon":"https://assets.tina.io/91d76337-e55d-4722-acb5-3106adb895b6/img/logos/linkedin.png","_content_source":{"queryId":"src/content/meta/meta.md","path":["meta","footer","socials",1]}},{"__typename":"MetaFooterSocials","text":"Twitter","url":"https://twitter.com/relationalai","icon":"https://assets.tina.io/91d76337-e55d-4722-acb5-3106adb895b6/img/logos/twitter.png","_content_source":{"queryId":"src/content/meta/meta.md","path":["meta","footer","socials",2]}}],"_content_source":{"queryId":"src/content/meta/meta.md","path":["meta","footer"]}},"_content_source":{"queryId":"src/content/meta/meta.md","path":["meta"]}}},"errors":null,"query":"\n query meta($relativePath: String!) {\n meta(relativePath: $relativePath) {\n ... on Document {\n _sys {\n filename\n basename\n breadcrumbs\n path\n relativePath\n extension\n }\n id\n }\n ...MetaParts\n }\n}\n \n fragment MetaParts on Meta {\n __typename\n banner {\n __typename\n enabled\n content\n }\n header {\n __typename\n links {\n __typename\n text\n url\n style\n }\n }\n footer {\n __typename\n sections {\n __typename\n name\n links {\n __typename\n text\n url\n }\n }\n socials {\n __typename\n text\n url\n icon\n }\n }\n}\n ","variables":{"relativePath":"./meta.md"}}};
globalThis.tina_info = tina;
})();
Rel Modules · RelationalAI
Check out highlights of RelationalAI at Snowflake's Data Cloud Summit 2024!
Rel Modules Our declarative modeling language Rel now supports modules!
A module groups together one or more declarations. For instance
module person
def name = "Sherlock Holmes"
module address
def street = "221B Baker Street"
def city = "London"
def country = "UK"
end
def telephone = "+44 202-456-1111"
end
This will display as below:
def output = person[:address][:street]
Relation: "221B Baker Street"
Modules can be imported into a lexical scope using the with
construct, allowing the use of short names. The with
construct can also be used to rename imported members.
with person use name, telephone as phone
with person:address use street
def output = name
def output = phone
def output = street
Relation:
module person
def name = "Sherlock Holmes"
module address
def street = "221B Baker Street"
def city = "London"
def country = "UK"
end
def telephone = "+44 202-456-1111"
end
with person use name, telephone as phone
with person:address use street
def output = name
def output = phone
def output = street
Modules are relations and computations can be performed over them like any other relation:
def person_without_phone(key, values...) =
person(key, values...) and
key != :telephone
def output = json_string[person_without_phone]
Relation:
" { "address": { "city": "London", "country": "UK", "street": "221B Baker Street" }, "name": "Sherlock Holmes" }"
For a more detailed introduction to modules, see the documentation .
© RelationalAI, Inc.
Product Resources About Us