未指定时的默认XML架构/XSD?

未指定时的默认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

我从数据分析员的角度获取了关于数据I/O的经验教训,而没有利用数据工程专业知识(并且非常明确地指出了这一缺点)。为了给各种备选方案提供上下文,考虑到我的商店中的约束,我简要地试验了XML导入/导出,并在线阅读了有关模式的内容。关于第四代语言环境的开源实用程序,我注意到的一点是,它似乎使用默认值(我没有指定默认值):


[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
  • 当XML中指定了
    schemaLocation
    时,请参见此处指定的XSD。对于 有关
    schemaLocation
    的更多信息,请参阅
  • 仅使用命名空间时,请参见
  • 当XML的提供者可用时,询问或检查源/文档
  • 使用相对唯一/信息丰富的元素名称时,或者如果您知道 部门/行业google元素名称或部门/行业和“xml模式”
  • 如果以上都不起作用,那么就少使用模式,或者编写自己的模式来适应数据


    更多关于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>