当指定 none 时默认 XML 架构/XSD?
Default XML schema / XSD when none is specified?
我正在从数据分析师的角度吸取关于数据 I/O 的经验教训,而没有借助数据工程专业知识(并且非常明确地指出了这一缺点)。为了提供各种替代方案的上下文,同时考虑到我店内的限制,我已经对 XML import/export 进行了简短的实验,并完成了有关模式的在线阅读。关于第 4 代语言环境的开源实用程序,我注意到的一件事是它似乎使用默认值(我没有指定):
<?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>
解释标签:所有以字符串"DataFrame..."开头的标签都是我在代码中做的匿名化。在匿名化之前,DataFrameX(其中 X 是任何字母数字字符)是数据框的名称我的 4GL 环境中的对象 [1]。所有包含字符串 "DataFrame" 和 "Field" 的标签也是匿名的。在匿名化之前,它们是数据框中字段的名称。标签<y>
只是4GL环境下数据帧集合的对象名称
数据的排列对我来说都很有意义,我知道我对数据来自的数据帧做了什么。所有的标签都有意义。我假设它们来自通用默认模式。但是,我的网络搜索没有显示任何迹象表明存在这种默认模式,更不用说 agreed/standardized 了。是否存在这样的通用默认值,或者这些标签是导出实用程序作者的结果?
[1] 4GL 环境是 Matlab,但我的问题是关于 XML 实践和约定而不是 Matlab。
任意 XML 文件没有默认 XML 架构。 W3C XML 建议给出了格式良好的规则,但这些规则定义了 XML 本身,而不是任何给定 XML 模式的词汇和语法。
在指定 none 时识别 XSD
- 当 XML 中指定了
schemaLocation
时,请参阅那里指定的 XSD。为了
有关 schemaLocation
的更多信息,请参阅
How to link XML to XSD using schemaLocation or noNamespaceSchemaLocation?
- 仅使用命名空间时,请参见
How to locate an XML Schema (XSD) by namespace?
- 当 XML 的提供者可用时,询问或检查 source/documentation。
- 当相对 unique/informative 元素名称被使用时,或者如果你知道
sector/industry google 元素名称 或 sector/industry 和 "xml schema".
如果上述 none 有效,请使用无模式,或编写您自己的模式以适应数据。
更多关于 XML 设计
在评论中,@user2153235 提问:
Is there a prevailing practice (or even a universal, minimal "base" scheme that is defaulted to in the absence of an explicit schema) wherein the atomic element is "item", and any other tag represents an element that is either a string or a structure composed of subordinate elements?
是的,有一个普遍的做法。
问题的答案:不,不存在通用的、最小的 "base" 模式 – 只是 XML 本身的良构规则。
您 post 中的 XML 设计不当:
- 命名很糟糕:
- 根元素名为
y
,但内容显然不是简单的 y 坐标或任何其他可以合理描述为 y
. 的内容
基于 DataFrame
的名称具有 C
字符后缀,后跟 _FieldN
数字后缀。除非 C
字符在某些域中有意义,否则应该扩展缩写。列表成员上的固定数字后缀最好由位置隐含,这样名称就可以在词汇上表示类型而无需分解。
- 未标记子结构:一般来说,结构不应该埋在字符串中的微格式中;应该施加标记,以便可以利用 XML 解析器,而不必在应用程序中实现微解析器。
我正在从数据分析师的角度吸取关于数据 I/O 的经验教训,而没有借助数据工程专业知识(并且非常明确地指出了这一缺点)。为了提供各种替代方案的上下文,同时考虑到我店内的限制,我已经对 XML import/export 进行了简短的实验,并完成了有关模式的在线阅读。关于第 4 代语言环境的开源实用程序,我注意到的一件事是它似乎使用默认值(我没有指定):
<?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>
解释标签:所有以字符串"DataFrame..."开头的标签都是我在代码中做的匿名化。在匿名化之前,DataFrameX(其中 X 是任何字母数字字符)是数据框的名称我的 4GL 环境中的对象 [1]。所有包含字符串 "DataFrame" 和 "Field" 的标签也是匿名的。在匿名化之前,它们是数据框中字段的名称。标签<y>
只是4GL环境下数据帧集合的对象名称
数据的排列对我来说都很有意义,我知道我对数据来自的数据帧做了什么。所有的标签都有意义。我假设它们来自通用默认模式。但是,我的网络搜索没有显示任何迹象表明存在这种默认模式,更不用说 agreed/standardized 了。是否存在这样的通用默认值,或者这些标签是导出实用程序作者的结果?
[1] 4GL 环境是 Matlab,但我的问题是关于 XML 实践和约定而不是 Matlab。
任意 XML 文件没有默认 XML 架构。 W3C XML 建议给出了格式良好的规则,但这些规则定义了 XML 本身,而不是任何给定 XML 模式的词汇和语法。
在指定 none 时识别 XSD
- 当 XML 中指定了
schemaLocation
时,请参阅那里指定的 XSD。为了 有关schemaLocation
的更多信息,请参阅 How to link XML to XSD using schemaLocation or noNamespaceSchemaLocation? - 仅使用命名空间时,请参见 How to locate an XML Schema (XSD) by namespace?
- 当 XML 的提供者可用时,询问或检查 source/documentation。
- 当相对 unique/informative 元素名称被使用时,或者如果你知道 sector/industry google 元素名称 或 sector/industry 和 "xml schema".
如果上述 none 有效,请使用无模式,或编写您自己的模式以适应数据。
更多关于 XML 设计
在评论中,@user2153235 提问:
Is there a prevailing practice (or even a universal, minimal "base" scheme that is defaulted to in the absence of an explicit schema) wherein the atomic element is "item", and any other tag represents an element that is either a string or a structure composed of subordinate elements?
是的,有一个普遍的做法。
问题的答案:不,不存在通用的、最小的 "base" 模式 – 只是 XML 本身的良构规则。
您 post 中的 XML 设计不当:
- 命名很糟糕:
- 根元素名为
y
,但内容显然不是简单的 y 坐标或任何其他可以合理描述为y
. 的内容
基于 DataFrame
的名称具有C
字符后缀,后跟_FieldN
数字后缀。除非C
字符在某些域中有意义,否则应该扩展缩写。列表成员上的固定数字后缀最好由位置隐含,这样名称就可以在词汇上表示类型而无需分解。
- 根元素名为
- 未标记子结构:一般来说,结构不应该埋在字符串中的微格式中;应该施加标记,以便可以利用 XML 解析器,而不必在应用程序中实现微解析器。