未指定时的默认XML架构/XSD?
我从数据分析员的角度获取了关于数据I/O的经验教训,而没有利用数据工程专业知识(并且非常明确地指出了这一缺点)。为了给各种备选方案提供上下文,考虑到我的商店中的约束,我简要地试验了XML导入/导出,并在线阅读了有关模式的内容。关于第四代语言环境的开源实用程序,我注意到的一点是,它似乎使用默认值(我没有指定默认值):未指定时的默认XML架构/XSD?,xml,xsd,schema,xsd-validation,xml-validation,Xml,Xsd,Schema,Xsd Validation,Xml Validation,我从数据分析员的角度获取了关于数据I/O的经验教训,而没有利用数据工程专业知识(并且非常明确地指出了这一缺点)。为了给各种备选方案提供上下文,考虑到我的商店中的约束,我简要地试验了XML导入/导出,并在线阅读了有关模式的内容。关于第四代语言环境的开源实用程序,我注意到的一点是,它似乎使用默认值(我没有指定默认值): [75;75;75;75;75;75;75;75;75;...;75;75] [2014;2014;2015;2015;2016;2016;...;2083;2084;2084;2
[75;75;75;75;75;75;75;75;75;...;75;75]
[2014;2014;2015;2015;2016;2016;...;2083;2084;2084;2085;2085;2086;2086]
基础知识
DEF
00-00
00-00
00-00
[2;2;4;2;5;3;5;3;3;1;5;5;...;4;5;3;3;2;4;2;1;2;4]
[75;75;75;75;75;75;...;75;75;75;75;75]
[1;2;3;4;5;6;7;...;1638;1639;1640;1641;1642]
[0;0;0;0;0;0.014925;0.223881;0.014925;...;0;0.059701;0;0;0;0;0;0;0.626866]
[75;75;75;75;75;75;...;75;75;75;75;75;75;75]
[1;1;1;1;1;1;1;...;1642;1642;1642;1642;1642]
[0;0;0;0;0;0;0;0;...;7;0.7;0.7;0.8;0.8;0.8;0.9;0.9;1]
[0;0.1;0.2;...;0;0.1;0.2;0;0.1;0]
[1;0.9;0.8;...;0.3;0.2;0.1;0;0.2;0.1;0;0.1;0;0]
[0;0;0;0;0;0;...1;1;1;1;1;1;1;1;1;1]
解释标签:所有以字符串“DataFrame…”开头的标签都是我在代码中进行的匿名化。在匿名化之前,DataFrameX(其中X是任何字母数字字符)是我的4GL环境中数据帧对象的名称[1]。所有包含字符串“DataFrame”和“Field”的标签也是匿名的。在匿名化之前,它们是数据帧中字段的名称。标签
只是4GL环境中数据帧集合的对象名
数据的安排对我来说都是有意义的,因为我知道我对数据来自的数据帧做了什么。所有的标记都有意义。我假设它们来自一个通用的默认模式。然而,我的网络搜索并没有显示出存在这样一个默认模式的任何迹象,更不用说已经达成一致/标准化了。是否存在这样的通用默认值,或者这些标记是导出实用程序的作者的结果
[1] 4GL环境是Matlab,但我的问题是关于XML实践和约定,而不是Matlab。对于任意XML文件,没有默认的XML模式。W3CXML建议中给出了格式良好的规则,但这些规则定义了XML本身,而不是任何给定XML模式的词汇表和语法 在未指定XSD时标识XSD
schemaLocation
时,请参见此处指定的XSD。对于
有关schemaLocation
的更多信息,请参阅
更多关于XML设计的信息 在评论中,@user215323询问: 是否有一种普遍的做法(或者甚至是在没有明确模式的情况下默认使用的通用、最小的“基本”方案),其中原子元素是“项”,而任何其他标记表示的元素是字符串或由从属元素组成的结构 是的,有一种普遍的做法 回答这个问题:不,没有通用的、最小的“基本”模式–只有XML本身的格式良好规则 您文章中的XML设计得很糟糕:
- 命名很糟糕:
- 根元素名为
,但内容显然不是简单的y坐标或任何其他可以合理描述为y
的东西y
- 基于
的名称具有DataFrame
字符后缀,后跟C
数字后缀。除非\u FieldN
字符在某些域中有意义,否则缩写应该扩展。列表成员上的硬连接数字后缀最好由位置暗示,这样名称就可以在词汇上表示类型,而无需分解C
- 根元素名为
- 下部结构未标记:一般情况下,结构不应以微格式埋在管柱内;应该进行标记,这样就可以利用XML解析器,而不必在应用程序中实现微解析器
xml\u write
函数的代码为。但我并没有真正尝试对函数进行反向工程,也没有找到解决方案,因为我没有架构。我只是想知道,在没有模式的情况下,对于用于嵌套对象的标记,是否有一个约定(实际的还是显式的)。我能从你的回答中得出结论说“不”吗?如果是的话,我想知道你是否可以在你的答案中加上这个。谢谢。嗯,你能详细说明一下当没有模式时,关于嵌套对象使用的标记的约定(实际的或明确的)是什么意思吗?你说的是命名约定吗?何时使用元素与属性?还有什么吗?我对图式的理解来自于我的理解以及随后的组成课程。它类似于强类型语言中分层“结构”的定义,即预定义组成数据元素的集合(有序与否)。当您实际提供与模式对应的数据时,它必须遵循结构和元素名称/类型。实际数据中的标记(尖括号中的标签)必须与模式中元素的名称匹配
<?xml version="1.0" encoding="utf-8"?>
<y>
<DataFrame1>
<DataFrame1_Field1>[75;75;75;75;75;75;75;75;75;...;75;75]</DataFrame1_Field1>
<DataFrame1_Field2>[2014;2014;2015;2015;2016;2016;...;2083;2084;2084;2085;2085;2086;2086]</DataFrame1_Field2>
<DataFrame1_Field3>
<item>ABC</item>
<item>DEF</item>
<...snip...>
<item>00-00</item>
<item>00-00</item>
<item>00-00</item>
</DataFrameP_FieldM>
<DataFrameP_FieldN>[2;2;4;2;5;3;5;3;3;1;5;5;...;4;5;3;3;2;4;2;1;2;4]</DataFrameP_FieldN>
</DataFrameQ>
<DataFrameR>
<DataFrameR_Field1>[75;75;75;75;75;75;...;75;75;75;75;75]</DataFrameR_Field1>
<DataFrameR_Field2>[1;2;3;4;5;6;7;...;1638;1639;1640;1641;1642]</DataFrameR_Field2>
<DataFrameR_Field3>[0;0;0;0;0;0.014925;0.223881;0.014925;...;0;0.059701;0;0;0;0;0;0;0.626866]</DataFrameR_Field3>
</DataFrameR>
<DataFrameS>
<DataFrameS_Field1>[75;75;75;75;75;75;...;75;75;75;75;75;75;75]</DataFrameS_Field1>
<DataFrameS_Field2>[1;1;1;1;1;1;1;...;1642;1642;1642;1642;1642]</DataFrameS_Field2>
<DataFrameS_Field3>[0;0;0;0;0;0;0;0;...;7;0.7;0.7;0.8;0.8;0.8;0.9;0.9;1]</DataFrameS_Field3>
<DataFrameS_Field4>[0;0.1;0.2;...;0;0.1;0.2;0;0.1;0]</DataFrameS_Field4>
<DataFrameS_Field5>[1;0.9;0.8;...;0.3;0.2;0.1;0;0.2;0.1;0;0.1;0;0]</DataFrameS_Field5>
<DataFrameS_Field6>[0;0;0;0;0;0;...1;1;1;1;1;1;1;1;1;1]</DataFrameS_Field6>
</DataFrameS>
</y>