2013-07-26 35 views
0

我可以在任何地方找到内置数据类型的xsd定义,还是未使用xsd定义?内置数据类型定义

例如,我猜想,XS:布尔数据类型将是这样定义的:

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

(由于根据规格,http://www.w3.org/TR/xmlschema-2/#boolean,布尔型可以具有值“真”的一个, '假','0'或'1')。

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

同样,在http://www.w3.org/TR/xmlschema-2有“数据类型定义的架构”,但对我来说这个scema doesen没有真正定义多少。同样,布尔类型在该模式中被如此定义:

<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> 

但是这只给出了whiteSpace限制。 这同样适用于所有其他数据类型,所以我不明白这个模式如何正确定义数据类型。

那么,如果有一个模式定义了内置数据类型,我可以在哪里找到它? ......还是我在这里误解了一些东西?

希望我的问题是不够清楚:)

在此先感谢您的帮助!

回答

0

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

较长的回答:原始数据类型(包括xsd:boolean)构成类型系统的基础;即使原则上也不可能有任何基元类型的XSD声明。 (术语'原始'只是我们给系统中那些必须在系统之外定义的名称的名称,通常是散文,而不是系统内部。)

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

某些内置类型 - 特别是所有普通(非原始)内置插件 - 原则上可以用XSD语法声明。但是由于处理器需要内置类型的内置知识,因此为它们提供实际的XSD声明不会产生有用的结果:至多,您提供的声明将被忽略为不必要和冗余;一个处理器也可能会选择提出一个错误,看看它是否会尝试为已经声明的类型提供第二个声明。 (关于内核和标准库的更清晰的故事可以避免这个问题,但XSD wg在1.0中没有提供一个干净的故事,向后兼容性问题意味着wg无法清理1.1中产生的混乱。)

在XSD 1.0 schema for schema documents中,您可以找到所有内置插件的XSD声明的近似值;您可能会发现非基元的声明比基元的声明更不令人满意。由于上述原因,所有这些声明都从XSD 1.1中的模式文档的模式中移出到两个单独的伪模式文档中,一个用于primitive datatypes,另一个用于ordinary built-in datatypes