查看原文
其他

认识XML文档:认识xsd文档篇(二)

可爱的冬梅 职业译员玩转翻译技术
2024-09-09

前面介绍了基于 XML 的 DTD,详见:XML文档篇:认识DTD(一)

今天再来分享一个它的替代者,XML Schema DefinitionXSD),也是定义 XML 文档的合法构建模块,非常类似 DTD,也是应用程序本地化中常见的文档。

所以,我们来简单了解一下XML Schema Definition(XSD)

在看本文前,请确保你已经:

如果不了解,可以点击对应的链接,查看我之前的分享。

01 XSD定义?

XML Schema 的作用是定义 XML 文档的合法构建模块。

其实真的定义跟XSD也差不多~

通过XSD我们可以验证XML是“合法”,同理,我们通过xsd也是为了验证XML是否“合法”。

在这里我用一个翻译包给大家看一下:

文件包里既有xml文档,又有一个 *.xsd 文档。如图1所示。

图1 翻译包截图

其实如果你在自己电脑中检索xsd的话,也会找到很多xsd文档,只不过你可能不知道而已。

比如我在我电脑里用Everything进行检索,就找到超多XSD文档,如图2 所示。

图2 在everything中检索xsd文档截图

OK,这是题外话,我们回到接收到的翻译包。如果打开这两个文档,如图3所示。

图3 XML原文和xsd文档对比

我们发现:

  • XML中的元素名就是右侧XSD文档中定义好的,比如:

    • XML第2行的根元素<Root>,是右侧XSD文档第3行的name属性值;

    • XML第3行的元素<Customers>,是右侧XSD文档第6行的name属性值;

    • XML第4行的元素<Customer>,是右侧XSD文档第9行的name属性值。

  • 左侧XML的结构是按照右侧XSD定义的,比如:

    • 在右侧XSD文档中,第一个根元素<xs:element>属性值Root,就是左侧的XML的根元素<Root>

    • 在右侧XSD文档中,第二行子元素<xs:element>属性值Customers,就是左侧的XML的<Root>的子元素<Customers>

    • 同理,<Customer>也是<Customers>的子元素。

  • 左侧XML元素的数量是按照右侧XSD定义的,比如:

    • 在右侧XSD文档中,第九行就说明了XML第4行的元素<Customer>,是可以出现0次-无数次的。

当然还有很多其它的发现~

对XML Schema来说,它可以:

  • 定义文档中的元素名,元素的属性值

  • 定义元素和属性的数据类型

  • 定义各个元素的关系,哪个元素是子元素,哪些元素是兄弟元素

  • 定义子元素的次序

  • 定义子元素的数目等

所以说 XML Schema 比 XSD 更强大,而且据说很快会在大部分网络应用程序中取代 XSD。

02 XSD构成

图4 XSD文档

如图4所示,首先,XSD也是XML文档,所以结构是符合XML的文档结构:

  • 第一行的<?xml version="1.0" encoding="utf-8" ?>是声明语句。

  • 从第二行开始,<xs:schema>就是根元素<schema>元素。

    <schema>元素可包含属性。一个 schema 声明往往看上去类似这样:<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

  • 第三行开始还有子元素<xs:element><xs:complexType>等。

我们看一下XSD的这个构成。

当然,我的原则还是:只认识这个文档,看看它有没有明显的错误,能进行译前分析就好了~

所以,写程序,不是我的初衷,更不是我的目的~

2.1 元素

在 XSD 中,元素依然是通过element来进行定义。语法如下:

<xs:element name="xxx" type="yyy"/>

其中:

  • name的属性值 xxx,指元素名

  • type的属性值 yyy,指元素的数据类型

所以,如图5所示,

  • 在右侧xsd中(绿色方框)就定义了左侧XML的元素(红色方框)有:<CompanyName> <ContactName> <ContactTitle>等;

  • 其中,

    • 蓝色椭圆所示,元素 <Customers> 是根元素<Root>的子元素;

    • 灰黑色椭圆所示,元素 <Customer> 是元素 <Customers> 的子元素;

图5 XSD的元素和各个元素之间的关系

更多关于XSD的元素和数据类型,你可以去网络上查找~

比如复合元素(complexType)是什么,在这个案例中,其实<Root><Customers>就是复合元素。

2.2 属性

在 XSD 中,属性通过 attribute 来进行声明。语法如下:

<xs:attribute name="xxx" type="yyy"/>

如图6所示,在右侧XSD中就声明了:

元素<ShipInfo>的属性是ShippedDate,其属性值(左侧XML文档的第65行)应该是日期时间数据类型,也就是在右侧第72行看到的dateTime

图6 XSD属性声明

更多属性介绍你可以去网络上搜索啦~

2.3 其它

当然,其它内容xsd的介绍,大家感兴趣的话可以自行去网络上查找,比如:

通过sequence元素来表示子元素出现的顺序,每个子元素可出现 0 到任意次数。

图7 sequence元素

通过key元素来指定属性或元素值(或一组值)必须是指定范围内的键。

图8 key元素

当然还有其它的,我也不是程序猿,我只能看懂,所以我不班门弄斧了,大家需要去网络上自查啦~


如果你已经懂了XSD是什么,我们下篇继续讲XSD怎么翻译~

当然,听不懂也没关系,真的没关系,其实定义和构成也不是很重要~

但是我们是搞翻译的嘛!又不是搞编程的!

我只要知道文档怎么翻译,保证本地化的质量就好了!

所以,我们下一篇文章讲方法论,讲XSD怎么翻译~。

好啦今天内容先到这里,再见啦~


往期精选

XML文档解析系列:

如何翻译包含DTD的XML文档

XML文档篇:认识DTD(一)

翻译包含HTML样式的XML文档 (CDATA篇)

翻译包含HTML样式的XML文档(实体篇)

如何翻译单语XML文档?

如何翻译多语言XML文档?(游戏本地化与APP本地化常见原文)

认识XML文档(二)XML的元素、标签、文本、属性和实体

认识XML文档(一)什么是XML文档?

译前处理系列:

巧用Vlookup、If、Or等函数解决数据合并问题

不会宏命令?试试用Transtool实现段段对照

如何导出段段对照的双语译文

翻译与本地化项目管理:

一名职业译员,在拿到翻译任务时,应该和PM确认哪些内容?

跟Evernote翻译风格指南学应用程序本地化

语言资产管理系列

术语管理篇:如何进行术语提取

memoQ操作系列:

memoQ 客户端安装注意事项

无法向记忆库添加条目,需要修复一下记忆库

memoQweb端常见问题和注意事项

memoQ server运维系列:

如何进行memoQ server的升级

修改于
继续滑动看下一个
职业译员玩转翻译技术
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存