Types 内置数据类型定义

Types 内置数据类型定义,types,xsd,built-in,Types,Xsd,Built In,我可以在任何地方找到内置数据类型的xsd定义吗,或者它们不是使用xsd定义的 例如,我猜想xs:boolean数据类型的定义如下: <xs:simpleType name="boolean"> <xs:restriction> <xs:pattern value="true|false|0|1"/> </xs:restriction> </xs:simpleType> (因为根据规范,boolean可以

我可以在任何地方找到内置数据类型的xsd定义吗,或者它们不是使用xsd定义的

例如,我猜想xs:boolean数据类型的定义如下:

<xs:simpleType name="boolean">
    <xs:restriction>
      <xs:pattern value="true|false|0|1"/>
    </xs:restriction>
</xs:simpleType>

(因为根据规范,boolean可以有一个值“true”、“false”、“0”或“1”。)

但是我找不到内置数据类型的模式规范

同样,在上有“数据类型定义的模式”,但对我来说,这个scema并没有真正定义太多。同样,在该模式中,布尔类型的定义如下:

<xs:simpleType name="boolean" id="boolean">
    <xs:annotation>
      <xs:appinfo>
        <hfp:hasFacet name="pattern"/>
        <hfp:hasFacet name="whiteSpace"/>
        <hfp:hasProperty name="ordered" value="false"/>
        <hfp:hasProperty name="bounded" value="false"/>
        <hfp:hasProperty name="cardinality" value="finite"/>
        <hfp:hasProperty name="numeric" value="false"/>
      </xs:appinfo>
      <xs:documentation source="http://www.w3.org/TR/xmlschema-2/#boolean"/>
    </xs:annotation>
    <xs:restriction base="xs:anySimpleType">
      <xs:whiteSpace fixed="true" value="collapse" id="boolean.whiteSpace"/>
    </xs:restriction>
  </xs:simpleType>

但这只提供了一个空格限制。 这同样适用于所有其他数据类型,因此我不理解该模式如何正确定义数据类型

同样,如果有一个定义内置数据类型的模式,我在哪里可以找到它? …还是我误解了什么

希望我的问题足够清楚:)


提前感谢您的帮助

简短回答:您可以找到一些近似值,但无法找到XSD内置类型的规范性定义,因为(正如您所怀疑的)它们不是使用XSD进行规范性定义的

较长的答案:原始数据类型,包括XSD:BooLein,构成了类型系统的基础;对于任何基元类型,即使在原则上也不可能有XSD声明。(术语“primitive”只是我们给系统中那些必须在系统之外定义的事物的一个名称,通常是以散文形式定义的,而不是在系统内部定义的。)

一般来说,原因很简单:XSD简单类型声明根据现有的原语定义新类型——因此,任何XSD处理器在处理任何XSD类型定义之前,必须已经知道这些原语。任何使用XSD定义原语的尝试都会(a)根据定义使如此定义的类型成为派生类型而不是原语,并且(b)导致无限回归。更具体地说:如您所示,我们可以枚举词法形式“true”、“false”、“1”和“0”——但是xsd:enumeration仅定义为通过枚举某个基类型的值空间中的选定值来限制某个基类型的值空间(在您的示例中缺失)的一种方法。但原语不能这样定义;出于形式目的,它们确实有一个基类型(xsd 1.0中的xsd:anySimpleType,xsd 1.1中的xsd:anyAtomicType),但anyAtomicType的值空间(以散文形式)定义为所有当前和未来基元类型的值空间的并集。基本类型的值空间的性质以及从词汇空间到值空间的映射性质不能在XSD中定义;它们必须以散文形式给出。(例如:您的枚举列出了布尔值;如何定义xsd:anyURI的词法空间?如何指定“1”和“true”都表示相同的值,“0”和“false”表示另一个值

一些内置类型——特别是所有普通类型(非基本类型)内置——原则上可以用XSD语法声明。但是,由于处理器需要具备内置类型的内置知识,因此为它们提供实际的XSD声明并不能产生有用的结果:充其量,您提供的声明将被忽略为不必要和冗余;处理器也可能选择引发错误,可能被视为试图为已声明的类型提供第二个声明。(关于内核和标准库的更清晰的故事本可以避免该问题,但XSD wg在1.0中没有提供清晰的故事,而向后兼容性问题意味着工作组无法在1.1中清理由此产生的混乱。)


在XSD 1.0中,您会发现所有内置项的XSD声明的近似值;您可能会发现非原语的声明没有原语的声明那么令人不满意。由于上述原因,所有这些声明都从XSD 1.1中的模式文档的模式中移出,进入两个单独的伪模式文档中简单回答:您可以找到一些近似值,但找不到XSD内置类型的规范性定义,因为(正如您所怀疑的)它们不是使用XSD进行规范性定义的

较长的答案:原始数据类型,包括XSD:BooLein,构成了类型系统的基础;即使在原则上,对于任何原始类型都不可能有XSD声明。(术语“primitive”只是我们给系统中那些必须在系统之外定义的事物的一个名称,通常是以散文形式定义的,而不是在系统内部定义的。)

一般来说,原因很简单:XSD简单类型声明根据现有的原语定义新的类型——因此,任何XSD处理器在处理任何XSD类型定义之前必须已经知道这些原语根据定义,使这样定义的类型成为派生类型而不是原语,并且(b)导致无限回归。更具体地说:我们可以枚举词汇形式“true”、“false”、“1”和“0”,正如您所示——但是xsd:enumeration仅定义为限制某些基类型的值空间的一种方式(在您的示例中缺少)通过枚举该基类型的值空间中的选定值。但不能以这种方式定义基元;出于形式目的,它们确实有一个基类型(xsd 1.0中的xsd:anySimpleType,xsd 1.1中的xsd:anyAtomicType),但定义了anyAtomicType的值空间(以散文形式)作为所有当前和未来原语类型的值空间的联合。原语类型值空间的性质以及从词汇空间到值空间的映射性质