定义内容的结构。

使用代码定义内容模型是设计使然。它使版本控制变得更容易,并使开发人员能够控制数据结构的布局方式。我们让在界面中添加、更改和删除字段变得毫不费力。

观看Schema 工作原理的视频,或滚动阅读它的工作原理。

你的第一个 Schema

当 Sanity 启动时,默认在项目 schemas 文件夹中查找 schema.js。让我们来构建一个简单的 Schema 开始:

// 首先,必须引入 schema-creator
import createSchema from "part:@sanity/base/schema-creator";// 然后引入插件可能暴露的 Schema 类型expose them
import schemaTypes from "all:part:@sanity/base/schema-type";// 接着创建 Schema
export default createSchema({// 名称name: "mySchema",// 连接文档类型,目前只需要一个types: schemaTypes.concat([{// 类型显示名称title: "Person",//API 标识符name: "person",// 文档类型为 `document `type: "document",// 字段声明fields: [// 该文档类型仅有一个字段{// 显示名称title: "Name",// API 标识符name: "name",// 字段类型type: "string",},],},]),
});

这个 Schema 配置创建了一个 person 的文档类型,它包含一个 name 字段。

稍后通过 API 获取这样的文档时,我们会得到这样的文档:

{"_id": "45681087-46e7-42e7-80a4-65b776e19f91","_type": "person","name": "Ken Kesey"
}

一个文档引用另一个文档

现在来设计一个描述一本书的简单文档。类型数组中,我们添加这样一个对象:

{title: 'Book',name: 'book',type: 'document',fields: [{title: 'Title',name: 'title',type: 'string'},{title: 'Cover',name: 'cover',type: 'image'},{title: 'Author',name: 'author',// `reference` 类型来指向另一个文档type: 'reference',// 这个引用只允许指向 `person` 类型的文档// 虽然可以列举更多类型,但尽量保持精简:to: [{type: 'person'}]}]
}

这个 Schema 创建了一个叫做 book 的文档类型,它包含三个字段:

  • 标题
  • 封面图片
  • 作者(该字段引用了另一个文档,在 to 字段里描述引用的文档类型。列出了一条规则为,类型可以是 person

表单看起来是这个样子:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p8lP5bGO-1659519232132)(https://cdn.sanity.io/images/3do82whm/next/5ec1ee1a6caae30d9a6b83c8212cdffec3c3f4a4-691x764.png?w=691&h=764&fit=clip&auto=format)]

当通过 API 获取这个文档时,我们会得到:

{_id: "d1760c53-428c-4324-9297-ac8313276c45",_type: "book",title: "One Flew Over the Cuckoos Nest",cover: {_type: "image",asset: {_ref: "image-Su3NWQ712Yg0ACas3JN9VpcS-322x450-jpg",_type: "reference"}},author: {_ref: "45681087-46e7-42e7-80a4-65b776e19f91",_type: "reference"}
}

如您所见,作者字段没有提及 Ken Kesey,但字段 _ref 中包含了 Ken Kesey 文档的 id。当获取引用的文档时,可以轻松的通过指示 API 去体会为目标文档的实际内容。您可以在 Query 教程 中相关信息。

数组的一种使用

让我们谈谈数组:有些书有不止一位作者。我们应该通过将作者字段设置为引用数组来改进 Book 文档类型:

{title: 'Authors',name: 'authors',type: 'array',of: [{type: 'reference',to: [{type: 'person'}]}]
}

从 API 返回的文档将如下所示:

{_id: "drafts.e7f370d0-f86f-4a09-96ea-12f1d9b236c4",_type: "book",title: "The Illuminatus! Trilogy",cover: {_type: "image",asset: {_ref: "image-Ov3HwbkOYkNrM2yabmBr2M8T-318x473-jpg",_type: "reference"}},authors: [{_ref: "9a8eb52c-bf37-4d6e-9321-8c4674673198",_type: "reference"},{_ref: "ee58f2ff-33ed-4273-8031-b74b5664ff5e",_type: "reference"}]
}

组织架构

最后的注意点是组织你的文件(们)。在这个示例中,我们将两种类型文档的定义都堆积到了同一个 JS 文件中。不推荐这么做;这会很快让代码失控。推荐的做法是在每个单独的文件中描述每种文档类型:

// 文件: schemas/schema.js
import createSchema from 'part:@sanity/base/schema-creator'
import schemaTypes from 'all:part:@sanity/base/schema-type'
import person from './person'export default createSchema({name: 'mySchema',types: schemaTypes.concat([person])
})// 文件: schemas/person.js
export default {title: "Person",name: "person",type: "document",fields: [{title: "Name",name: "name",type: "string",}]
}

这涵盖了非常基础的内容,但还有更多内容!现在,让我们深入探讨使用 Sanity 对内容进行建模时的最佳实践。

Headless CMS Sanity 数据建模——定义文档内容的结构相关推荐

  1. 数据建模步骤文档_二维溃坝洪水模拟(五)二维模型建模

    1 前言 本文主要说明案例中水库下游区域HEC-RAS二维建模的过程.文章首先给出建模的基本原则与建模的注意事项,确定了大致的研究区域.其次,整个下游洪水演进区域由单一二维模型模拟,下游存在一条较大的 ...

  2. 数据分析之如何制作数据埋点文档(二)

    作者:Aaron(转载已取得作者授权) 在第一篇<数据分析之如何制作数据埋点文档>中已经对工作中应用的数据埋点的基础概念.基本分类.定义规范.流程以及应用场景做了简单的介绍,基于部分看官老 ...

  3. java将后台数据库查询到的数据导出word文档当中

    java将后台数据库查询到的数据导出word文档当中 之前项目需求使用Java导出word文档,一直没有进行整理,今天把它进行整理出来,以便以后使用到:下面是导出的word文档. // 前端报告表格 ...

  4. JS实现获取word文档内容并输出显示到html页面示例,和将页面数据写入txt文件

    JS实现获取word文档内容并输出显示到html页面示例 注意:这里使用了ActiveXObject组建,因此需要使用IE内核浏览器运行本代码. <!DOCTYPE html> <h ...

  5. html语言中,定义文档中一个正在打开的链接的颜色的代码是,2017微软认证考试精选练习(附答案)...

    2017微软认证考试精选练习(附答案) 1.如果要使图像在缩放时不失真,在图像显示原始大小时,按下( )键,拖动 图像右下方 的控制点,可以按比例调整图像大小 B A. Ctrl B. Shift C ...

  6. CTS(16 )---Android 兼容性定义文档

    Android 兼容性定义文档 欢迎阅读 Android 兼容性定义文档 (CDD).本文档列举了设备需要满足哪些要求才能与最新的 Android 版本兼容.为了与 Android 兼容,设备实现必须 ...

  7. java如何根据模板填充数据生成word文档

    java根据模板填充数据生成word文档 这篇文章干什么? 思路总览 1.准备word模板 2.转换文件格式 3.编写代码 补充--下载流 这篇文章干什么?   使用代码将word模板内容进行替换,并 ...

  8. Springboot 项目导出word文档(文档内容包括数据以及服务器图片)

    Springboot 项目freemarker导出word文档(文档内容包括数据以及服务器图片) 前些天有需求要完成导出word文档功能,基础数据导出word文档,网上也能搜到很多源代码,但是我这边要 ...

  9. [经典]数据产品需求文档怎么写?

    何为数据产品? 从广义上讲,一切以数据作为驱动或者核心的都叫数据产品(例如数据报表平台.DMP.搜索与精准化产品.风控产品等等),从狭义上讲,就是公司的内部数据平台.今天和大家讨论的,主要是关于公司的 ...

最新文章

  1. php静态方法调用变量吗,php静态方法怎么调用非静态变量?
  2. mysql 计算gps坐标距离_mysql、sqlserver和php计算GPS经纬度坐标距离
  3. Pandas数据挖掘与分析时的常用方法
  4. APR分析-共享内存篇
  5. Spring Boot引用本地jar包
  6. php直接的模块接口,api(接口)模块
  7. JavaScript学习随记——错误类型
  8. yanobox nodes 3 Mac新一代点线粒子特效运动图形插件
  9. 创朵计算机维修,创建第一个计算机监控软件服务
  10. vue2.0中ckeckbox(复选框)的使用心得,及对click事件和change的理解
  11. elk 概念整理 集群状态 - yellow
  12. weblogic部署启动时报错(weblogic.application.ModuleException)
  13. HorizontalScrollView 仿真 tabLayout
  14. 对嵌入式开发方向的一些思考:在物联网方向
  15. Android 模拟器 连接局域网
  16. 【历史上的今天】4 月 3 日:亚马逊卖出第一本书;世界上第一通手机电话;IBM 计算机先驱出生
  17. 什么是微信SCRM客服系统
  18. 免费的office软件哪个好用
  19. 动态修改窗口标题和类名
  20. Java实现Redis的列表(List)命令

热门文章

  1. 11省市联动 828 B2B企业节启动仪式(伟仕佳杰站)顺利举办
  2. 如何处理在WINDOWS VISTA上安装VS2008时遇到要求安装WINDOWS XP SP2的错误和QQ对战平台安装后不能登录的问题
  3. JS实现国家、省、市
  4. 内存检测工具sanitize
  5. $.each()的理解
  6. 4PAM的误码率仿真
  7. Java是剑客,.NET是刀客
  8. python 自动播放_在IPython noteb中自动播放声音
  9. javafx控件Button
  10. 全国高校食堂排行榜TOP10?!