【XML】学习笔记第四章-schema

Schema

读音: /ˈskiːmə/

元素 element : /ˈelɪmənt/

概述

Schema重要特征:由XML编写

作用

定义可出现在文档中的元素
定义出现

与DTD相比Schema的优势

  • XML Schema可以针对未来的需求进行扩展
  • Schema更加完善、功能也更强大
  • XML Schema是基于XML进行编写
  • XML Schema支持数据类型
  • XML Schema支持命名空间

补充:
最强大的地方:对数据类型的支持
Schema符合XML规范、DTD不符合XML规范

基础命名空间:

  • 一个是用于Schema文档的Schema URI,即 http://www.w3.org/2001/XMLSchema 。通常使用xs来代表该命名空间。
  • 另一个用于XML文档,即 http://www.w3.org/2001/XMLSchema-instance ,通常使用xsi来代表该命名空间。更多关于这两个命名空间的作用

模式

文档通常以单独的文件形式存在,文件扩展名为.xsd。

引用方法

当XML引入XML Schema时,根据XML文档的元素是否属于某个特定命名空间的,可以按照如下两种方式引入:

  • 不属于特定的命名空间,通过属性xsi:noNamespaceSchemaLocation引入
  • 属于某个特定的命名空间,通过属性xsi:shemaLocation引入

通过xsi:noNamespaceSchemaLocation引入

如果被引入的Schema文件需要约束XML文件中不属于任何特定的命名空间元素,使用xsi:noNamespaceSchemaLocation属性引入。
具体语法如下:

<根元素名称 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nonamespaceschemalocation="XML Schema">
</根元素名称>

xsi:noNamespaceSchemaLocation :属性值为一个Schema文件的URI。该属性值只能是一个Schema文件URI,即只能使用一个Schema文件。

通过xsi:shemaLocation引入

如果被引入的Schema文件需要约束XML文件中属于某个任何特定的命名空间元素,则通过xsi:schemaLocation属性引入。具体语法如下:

<根元素名称 [xmlns:命名空间别名="&#x547D;&#x540D;&#x7A7A;&#x95F4;URI" ]+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" < code></根元素名称>
  • xsi:schemaLocation=”[命名空间URI Schema文件路径]+”>
  • xsi:schemaLocation=”[命名空间URI Schema文件路径]+” :该属性值比较灵活,可以同时引入多个Schema文件。每一个Schema的引入都需要一个命名空间URI和Schema文件路径,命名空间URI和Schema文件路径中间使用空格间隔。

Schema的语法结构

XML Schema是扩展名为”.xsd”的文本文件,使用XML语法编写。基本的语法结构为:


......[元素、属性、注释、数据类型、schema的复用]

除此之外还可以为该元素指定两个属性:

  • elementFormDefault:该属性值可以是qualified或unqualified,用于指定XML文档使用该Schema中定义的局部元素时是否必须用命名空间限定。
  • attributeFormDefault:该属性值可以是qualified或unqualified,用于指定XML文档使用该Schema中定义的局部属性时是否必须用命名空间限定。

定义元素的主要语法:

语法1:

<element name="&#x201D;&#x5143;&#x7D20;&#x540D;&#x79F0;&#x201D;" type="&#x201D;&#x6570;&#x636E;&#x7C7B;&#x578B;&#x201D;" [default="&#x201D;&#x9ED8;&#x8BA4;&#x503C;&#x201D;]" [minoccurs="&#x201D;&#x6700;&#x5C11;&#x51FA;&#x73B0;&#x7684;&#x6B21;&#x6570;&#x201D;" ] [maxoccurs="&#x201D;&#x6700;&#x591A;&#x51FA;&#x73B0;&#x7684;&#x6B21;&#x6570;&#x201D;]/">
</element>

语法2:

<element name="&#x201D;&#x5143;&#x7D20;&#x540D;&#x79F0;&#x201D;" [default="&#x201D;&#x9ED8;&#x8BA4;&#x503C;&#x201D;]" [minoccurs="&#x201D;&#x6700;&#x5C11;&#x51FA;&#x73B0;&#x7684;&#x6B21;&#x6570;&#x201D;]" [maxoccurs="&#x201D;&#x6700;&#x591A;&#x51FA;&#x73B0;&#x7684;&#x6B21;&#x6570;&#x201D;]">
  Element type
</element>

语法3:

<element ref="&#x201D;&#x5F15;&#x7528;&#x5143;&#x7D20;&#x540D;&#x79F0;&#x201D;" [default="&#x201D;&#x9ED8;&#x8BA4;&#x503C;&#x201D;]" [minoccurs="&#x201D;&#x6700;&#x5C11;&#x51FA;&#x73B0;&#x7684;&#x6B21;&#x6570;&#x201D;" ] [maxoccurs="&#x201D;&#x6700;&#x591A;&#x51FA;&#x73B0;&#x7684;&#x6B21;&#x6570;&#x201D;]/">
</element>

定义属性的语法格式:

属性说明:

  • name :由程序员指定,元素的名字
  • type :元素的数据类型
  • default :该元素的默认值,该属性是可选的。
  • minOccurs :指定该元素出现的最少次数,默认值为1。该属性是可选的。如果属性值为0则表示该元素是可选的;如果大于0,则该元素是强制出现的。如果minOccurs没有与maxOccurs同时出现,则该属性值只能为0或1。
  • maxOccurs :该元素出现的最大次数,默认值为1。该属性是可选的。如果指定该元素可以出现任意多次,则属性值为”unbounded”;如果minOccurs没有与maxOccurs同时出现,则该属性值不能为0。
  • ref :引用的元素名称。

语法1:

<xs:attribute name="&#x5C5E;&#x6027;&#x540D;" type="&#x5C5E;&#x6027;&#x7C7B;&#x578B;" [default="&#x9ED8;&#x8BA4;&#x503C;" ]| [fixed="&#x56FA;&#x5B9A;&#x503C;" ]>
</xs:attribute>

语法2:


注释的具体方法:

  1. XML语法中的注释。
  2. 通过标记来增加注释,该方式具有更好的可读性。

  3. <annotation…/>`:通常放在各种Schema组件定义的开始部分,用于说明该Schema组件的作用。内部可以出现多个

  4. <documentation></documentation> :该子元素的注释主要供人来阅读使用。
  5. <appinfo></appinfo> :该子元素的注释主要供其它程序来使用

XSD数据类型

  • 简单类型
  • 内置的数据类型(built-in data types)
    • 基本的数据类型
    • 扩展的数据类型
      *用户自定义数据类型(通过simpleType定义)
    • 限制
    • 联合
    • 扩展
  • 复杂类型(通过complexType定义)
  • 包含子元素
  • 包含属性
  • 包含属性+子元素

内置数据类型是被预先定义好的,这些数据类型全部位于命名空间http://www.w3.org/2001/XMLSchema下,所有的内置数据类型都是简单类型

[锚点标记]

【XML】学习笔记第四章-schema

上图中,任意类型包括两种:

  • anyType:表示该元素为任意类型,与DTD的ANY类似。此类型对于元素的内容没有任何约束。
  • anysimpletype:表示该元素为任意简单类型。即定义为该类型的元素除不能包含子元素和属性外,没有任何其它的约束。

内置基本数据类型

最常用的简单数据类型

  • xs:string
  • xs:decimal
  • xs:integer
  • xs:boolean
  • xs:date
  • xs:time

字符串及其相关类型

数据类型 描述 string 表示字符串,原封不动保留所有空白 Qname 表示一个包含XML命名空间在内的名称

数值类型

数据类型 描述 decimal 表示特定精度的数字 float 单精度32位浮点数,支持科学计数法 double 双精度64位浮点数,支持科学技术法 hexBinary 表示十六进制数

日期类型

数据类型 描述 date 表示日期YYYY-MM-DD格式的时间 gYearMonth 表示年月YYYY-MM格式的时间 gYear 表示年YYYY格式的时间 gMonthDay 表示月日- -MM-DD格式的时间 getDay 表示日期-DD格式的时间 getMonth 表示月份-MM格式的时间

时间类型

数据类型 描述 duration 表示持续时间PnYnMnDTnHnMnS,P起始定界符,T分隔符,s前面的n可以是小数(最多可显示三位小数,即支持到毫秒级) dateTime 表示特定的时间YYYY-MM-DDThh:mm:ss:sss,sss表示毫秒数 time 表示特定的时间hh:mm:ss:sss,sss表示毫秒数

二进制数据类型

数据类型 描述 base64Binary 表示任意base64编码的二进制数 hexBinary 表示任意16进制编码的二进制数

其他类型

boolean类型

boolean:布尔型,只能接受true,false,0,1

anyURI类型

anyURI :表示一个URI,用来定位文件

Notation类型

NOTATION:表示XML中的NOTAITION类型,不能在模式中直接出现的抽象类型,只能用于派生其它类型。

内置扩展数据类型

  • String类型派生出来用于约束属性的类型及其描述

数据类型 描述 NMTOKEN 必须是合法的XML名称,只能由字母、数字、”_”、”-“、”.”、”:”组成 NMTOKENS 多个NMTOKEN,空格为分隔符 ID 标识符 IDREF 引用另一个ID IDREFS 引用多个已有的ID,空格为分隔符 ENTITY 外部实体 ENTITIES 多个外部实体,空格为分隔符

  • tring类型派生出来的类型及其描述

数据类型 描述 normalizedString 将字符串内容包含的换行、制表符和回车符都替换成空白 token 将字符串内容包含的换行、制表符和回车符都替换成空白,自动删除字符串前后的空白,如果字符串中间包含多个连续的空白,则会被压缩为一个空白 language 定义合法的语言代码 Name 含有一个有效的XML名称的字符串 NCName 省略或不带有命名空间前缀的XML名称字符串,不含冒号

  • decimal类型派生出来的类型及其描述

数据类型 描述 最小值 最大值
integer 无限制整数类型 无限制 无限制
nonNegativeInteger 无限制的非负整数 0 无限制
nonPositiveInteger 无限制的非正整数 无限制 0
long 64位的有符号整数 -263 263-1
positiveInteger 无限制的正整数 1 无限制
negativeInteger 无限制的负整数 无限制 -1
unsignedLong 64位的无符号整数 0 264-1
int 32位的有符号整数 -231 231-1
unsignedInt 32位的无符号整数 0 232-1
short 16位有符号整数 -215 215-1
unsignedShort 16位无符号整数 0 216-1
byte 8位有符号整数 -27 27-1
unsignedByte 8位无符号整数 0 28-1

自定义数据类型

<xs:simpletype name="&#x201C;&#x81EA;&#x5B9A;&#x4E49;&#x6570;&#x636E;&#x7C7B;&#x578B;&#x7684;&#x540D;&#x79F0;&#x201D;">
       <xs:restriction base="&#x201C;&#x5185;&#x7F6E;&#x6570;&#x636E;&#x7C7B;&#x578B;&#x201D;">
        &#x81EA;&#x5B9A;&#x4E49;&#x6570;&#x636E;&#x7C7B;&#x578B;&#x7684;&#x5185;&#x5BB9;&#x6A21;&#x5F0F;
       </xs:restriction>
</xs:simpletype>

用户自定义类型按位置可以分为全局类型和局部类型。

  • 全局类型是直接在schema标记内定义的类型,该类型可以被所有元素使用。
  • 局部类型是定义在某个元素内部的类型,该类型只能被定义该类型的元素所引用

用户自定义类型还可以按照复杂程度划分,分为简单类型和复杂类型。

自定义简单数据类型

自定义简单类型是在内置数据类型的基础上通过 限制、列表和联合中一种或几种方式形成的新数据类型。简单数据类型的定义语法:

  • 【全局】
  • 【局部】
  • name属性:自定义的数据类型名称。当定义的简单数据类型为 全局数据类型,即直接在标记中定义,必须写出该属性。如果为局部数据类型,则没有该属性。
限制

如果通过限制方式产生自定义类型,需要使用的标记为restriction。语法格式如下:

<xs:simpletype [name="&#x81EA;&#x5B9A;&#x4E49;&#x7C7B;&#x578B;&#x540D;&#x79F0;" ]>
        <xs:restriction base="&#x57FA;&#x7C7B;&#x578B;">
&#x3000;&#x3000;[&#x7EA6;&#x675F;&#x7279;&#x5F81;]+
        </xs:restriction>
</xs:simpletype>

约束特征有

  • xs:whiteSpace value=”collspace” 去掉前后空白
列表

Schema中定义列表类型使用

联合

Schema使用

复杂数据类型

复杂数据类型包含其他元素、属性和混合内容,复杂数据类型的声明语法如下:

<xs:complextype name="&#x201C;&#x6570;&#x636E;&#x7C7B;&#x578B;&#x7684;&#x540D;&#x79F0;&#x201D;">
  &#x5185;&#x5BB9;&#x6A21;&#x578B;&#x5B9A;&#x4E49;&#xFF08;&#x5305;&#x62EC;&#x5B50;&#x5143;&#x7D20;&#x548C;&#x5C5E;&#x6027;&#x7684;&#x58F0;&#x660E;&#xFF09;
</xs:complextype>

复杂类型所约束的内容可能包含属性、子元素或同时包含子元素和属性。复杂元素也有可能在包含子元素的同时还包含字符内容,这样的元素被称为混合内容。定义复杂元素的语法格式如下所示:

<xs:complextype [name="&#x201D;&#x81EA;&#x5B9A;&#x4E49;&#x5143;&#x7D20;&#x540D;&#x79F0;&#x201D;]" [mixed="&#x201D;true|false&#x201D;]">
    [&#x987A;&#x5E8F;&#x3001;&#x9009;&#x62E9;&#x3001;&#x65E0;&#x5E8F;&#x3001;&#x7B80;&#x5355;&#x5185;&#x5BB9;&#x3001;&#x590D;&#x6742;&#x5185;&#x5BB9;]+
</xs:complextype>
  • name属性:自定义的数据类型名称。当定义的简单数据类型为 全局数据类型,即直接在标记中定义,必须写出该属性。 如果为局部数据类型,则没有该属性
  • mixed属性:如果mixed属性值设置为true,则表示该元素的内容为混合内容。该属性默认值为false。

顺序 <xs:sequence></xs:sequence>

使用该元素定义的数据类型用于设定子元素的顺序,表示该元素的子元素是有序的。使用该元素的语法格式如下:

<xs:complextype name="mytype">
    <xs:sequence [maxoccurs="&#x6700;&#x591A;&#x51FA;&#x73B0;&#x7684;&#x6B21;&#x6570;" ] [minoccurs="&#x6700;&#x5C11;&#x51FA;&#x73B0;&#x7684;&#x6B21;&#x6570;">
        [<xs:element name="test" type="xs:string" minoccurs="&#x6700;&#x5C11;&#x51FA;&#x73B0;&#x7684;&#x6B21;&#x6570;" maxoccurs="&#x6700;&#x591A;&#x51FA;&#x73B0;&#x7684;&#x6B21;&#x6570;"></xs:element>]+
    </xs:sequence>
</xs:complextype>
  • maxOccurs属性:最多出现的次数,通常为一个固定的数字。可以作为sequence的属性,也可以作为element的属性。当最多次数没有限制时该值为unbounded。
  • minOccurs属性:最少出现的次数,为一个固定的数字。可以作为sequence的属性,也可以作为element的属性。

复杂内容 <complexcontent></complexcontent>

使用该元素有点类似于编程语言的继承,相当于在某一基类型的基础上进行扩展或限制。如果元素包含子元素(是否包含属性不限制),则可以使用该元素对元素内容进行定义。

  • 限制 <xs:restriction base="&#x57FA;&#x7C7B;&#x578B;"></xs:restriction>:基类型为一个已经定义好的复杂数据类型,在基类型的基础上增加限制。
  • 扩展 <xs:extension base="&#x57FA;&#x7C7B;&#x578B;">>&#xFF1A;&#x57FA;&#x7C7B;&#x578B;&#x4E3A;&#x4E00;&#x4E2A;&#x5DF2;&#x7ECF;&#x5B9A;&#x4E49;&#x597D;&#x7684;&#x590D;&#x6742;&#x6570;&#x636E;&#x7C7B;&#x578B;&#x3002;&#x5728;&#x57FA;&#x7C7B;&#x578B;&#x7684;&#x57FA;&#x7840;&#x4E0A;&#x6269;&#x5C55;&#xFF0C;&#x53EF;&#x4EE5;&#x65E2;&#x53EF;&#x4EE5;&#x589E;&#x52A0;&#x5B50;&#x5143;&#x7D20;&#xFF0C;&#x4E5F;&#x53EF;&#x4EE5;&#x589E;&#x52A0;&#x5C5E;&#x6027;&#x3002;</xs:extension>

简单内容 <simplecontent></simplecontent>

如果元素只包含属性,不包含子元素,则可以使用该元素定义元素内容。具体的内容方式包括在基类型上扩展和限制两种方式:

  • 限制 <xs:restriction base="&#x57FA;&#x7C7B;&#x578B;"></xs:restriction>:基类型必须为一个仅包含属性的简单类型。该标记中可以嵌套基于restriction元素内的所有特征元素,对当前的基类型进行限制。
  • 扩展 <xs:extension base="&#x57FA;&#x7C7B;&#x578B;"></xs:extension>:基类型必须为一个简单类型,该元素内可以包含属性的定义,在简单内容的基础上增加属性。

选择 <xs:choice></xs:choice>

使用该元素定义的数据类型用于设定子元素的选择关系,表示该元素的子元素可以根据实际需要从子元素中选择一个使用。使用该元素的语法格式如下

<xs:complextype name="mytype">
    <xs:choice [maxoccurs="&#x6700;&#x591A;&#x51FA;&#x73B0;&#x7684;&#x6B21;&#x6570;" ] [minoccurs="&#x6700;&#x5C11;&#x51FA;&#x73B0;&#x7684;&#x6B21;&#x6570;">
        [<xs:element name="test" type="xs:string" minoccurs="&#x6700;&#x5C11;&#x51FA;&#x73B0;&#x7684;&#x6B21;&#x6570;" maxoccurs="&#x6700;&#x591A;&#x51FA;&#x73B0;&#x7684;&#x6B21;&#x6570;"></xs:element>]+
    </xs:choice>
</xs:complextype>
  • maxOccurs属性:最多出现的次数,通常为一个固定的数字。可以作为choice 的属性,也可以作为element的属性。当最多次数没有限制时该值为unbounded。
  • minOccurs属性:最少出现的次数,为一个固定的数字。可以作为choice 的属性,也可以作为element的属性。

无序 <xs:all></xs:all>

使用< xs:all>元素定义的数据类型用于设定子元素是没有顺序的,表示该元素的子元素是无序的。但是该元素设定中有一些约束子元素数量不能被设定, 只能是一个;也 不能增加属性;不能与< xs:sequence>或< xs:choice>同时出现;只能作为 <complexcontent></complexcontent><complexttype></complexttype>的顶级元素。使用该元素的语法格式如下:


        []+

  • maxOccurs属性:最多出现的次数,通常为一个固定的数字。可以作为all的属性,此时该值只能为1,也可以作为element的属性,此时该值可以为0或1。
  • minOccurs属性:最少出现的次数,为一个固定的数字。可以作为all的属性,也可以作为element的属性,该值只能为0或1。

XSD下限定/Facets

XSD属性

属性: 简单元素无法拥有属性。假如某个元素拥有属性,它就会被当作某种复杂数据类型。但是属性本身总是作为简单类型被声明的。

定义属性的语法:


在此处,xxx 指属性名称,yyy 则规定属性的数据类型,这里是简单数据类型。

这是带有属性的 XML 元素:

Smith

这是对应的属性定义:


当没有其他的值被规定时,默认值就会自动分配给属性。


固定值同样会自动分配给属性,并且您无法规定另外的值。


在缺省的情况下,属性是可选的。如需规定属性为必选,请使用 “use” 属性:


XSD中的元素

XML Schema中定义的元素可分为简单元素和复杂元素。

  • 简单元素 : 一个元素中如果仅仅包含数字、字符串或其他数据,不包含子元素和属性,这种元素被称为简单元素。这类元素使用简单数据类型进行定义。
  • 复杂元素 : 包含属性和子元素的元素称为复杂元素。这类元素使用复杂数据类型进行定义。

简单元素

简单元素指那些只包含文本的元素。它不包含任何其他的元素或属性。

文本有很多类型。它可以是 XML Schema 定义中包括的类型中的一种(布尔、字符串、数据等等),或者它也可以是您自行定义的定制类型。

简单元素的语法:


此处 xxx 指元素的名称,yyy 指元素的数据类型,这里是简单数据类型。

简单元素的默认值和固定值

简易元素可拥有指定的默认值或固定值。当没有其他的值被规定时,默认值就会自动分配给元素。


固定值同样会自动分配给元素,并且您无法规定另外一个值。


Original: https://www.cnblogs.com/mllt/p/xml-schema.html
Author: 萌狼蓝天
Title: 【XML】学习笔记第四章-schema

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/611063/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Linux下如何部署FTP服务器

    FTP 是 File Transfer Protocol 的缩写,即文件传输协议,它通过网络在服务器和客户端之间传输文件,现在已经成为一种广泛使用的标准工具 vsftpd 是 ve…

    Linux 2023年6月13日
    091
  • windows 使用挂载盘提供FTP服务

    环境说明: NFS服务器:centos7.0 IP:192.168.18.10 FTP服务器:windows server 2008 IP:192.168.18.41 准备工作: …

    Linux 2023年6月8日
    0169
  • UWP 自定义密码框控件

    1. 概述 微软官方有提供自己的密码控件,但是控件默认的行为是输入密码,会立即显示掩码,比如 *。如果像查看真实的文本,需要按查看按钮。 而我现在自定义的密码控件是先显示你输入的字…

    Linux 2023年6月13日
    091
  • IEEE浮点数标准

    IEEE浮点数标准 阅读笔记:Computer System : A Programmmer’s Perspective 基本概念 IEEE浮点数标准采用 [V=(-1…

    Linux 2023年6月8日
    0119
  • Linux与Windows文件同步

    本次采用的同步方式是rsync,Rsync是一款免费且强大的同步软件,可以镜像保存整个目录树和文件系统,同时保持原来文件的权限、时间、软硬链接。第一次同步时会复制全部内容,下次只传…

    Linux 2023年6月8日
    0135
  • 常见开发模型-敏捷开发与瀑布开发模型详解

    引言 在学习软件工程的时候接触过一些软件工程开发模型的相关概念,其中,印象比较深刻的就是瀑布模型和敏捷开发模型。这两种模型在日常的软件开发中都是非常常用的,但是它们也有比较大的区别…

    Linux 2023年6月7日
    0131
  • anaconda创建虚拟环境

    anaconda创建虚拟环境 1·查看当前存在的虚拟环境 conda env list 或者 conda info -e 2·创建虚拟环境,环境名重要 conda create -…

    Linux 2023年6月14日
    098
  • 【Python】AttributeError: ‘Rotation’ object has no attribute ‘from_dcm’

    报错的代码如下: from scipy.spatial.transform import Rotation def dcm2euler(mats: np.ndarray, seq:…

    Linux 2023年6月13日
    070
  • 快速上手FastJSON

    作为一名后端开发而言肯定会接触数据,把数据提供给前端或者把数据存储起来,目前比较火热的传输格式是json,给前端传json是再常见不过啦,甚至是往db里面直接存入json。 在ja…

    Linux 2023年6月14日
    081
  • python入门基础知识四(字典与集合)

    dict_name = {key1:value1,key2,value2,…} 空字典:dict_name = {} or dict_name = dict() 字典的…

    Linux 2023年6月7日
    070
  • Python Django构建简易CMDB

    前言 本文仅是对以前写的小示例进行一次梳理和代码优化,由于本人菜鸟一枚,前端,系统运维知识只知皮毛,后端python也没有实际开发经验,在开发过程中也没有考虑堡垒机等一系列服务器的…

    Linux 2023年6月7日
    0125
  • Linux 查看端口被占用

    端口被占用网上很多,这种频繁操作的命令容易忘记,写这边文章的目的主要是加深操作命令的印象, Liux 查看端口占用情况可以使用 lsof 和 netstat 命令。 lsof ls…

    Linux 2023年6月6日
    089
  • 聊聊redis单线程为什么能做到高性能和io多路复用到底是个什么鬼

    1:io多路复用epoll io多路复用简单来说就是一个线程处理多个网络请求。 我们知道epoll in 的事件触发是可读了,这个比较好理解,比如一个连接过来,或者一个数据发送过来…

    Linux 2023年5月28日
    082
  • [云计算]腾讯云从业者认证-思维导图

    第一章 云计算基础介绍 第二章 腾讯云服务器产品介绍 第三章 腾讯云网络产品介绍 第四章 腾讯云CDN加速产品介绍 第五章 腾讯云存储产品介绍 第六章 腾讯云数据库产品介绍 第七章…

    Linux 2023年6月13日
    0124
  • mysql字符串拼接

    Mysql数据库中的字符串 CONCAT()CONCAT_WS()GROUP_CONCAT() CONCAT() CONCAT(string1,string2)最常用的字符串拼接方…

    Linux 2023年6月6日
    077
  • macOS Catalina new Shell,解决 The default interactive shell is now zsh

    The default interactive shell is now zsh. To update your account to use zsh, please run ch…

    Linux 2023年5月28日
    0146
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球