当指定 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

  1. 当 XML 中指定了 schemaLocation 时,请参阅那里指定的 XSD。为了 有关 schemaLocation 的更多信息,请参阅 How to link XML to XSD using schemaLocation or noNamespaceSchemaLocation?
  2. 仅使用命名空间时,请参见 How to locate an XML Schema (XSD) by namespace?
  3. 当 XML 的提供者可用时,询问或检查 source/documentation。
  4. 当相对 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 解析器,而不必在应用程序中实现微解析器。