我可以在任何地方找到内置数据类型的xsd定义,或者它们不是使用xsd定义的吗?
例如,我猜想xs:boolean数据类型的定义如下所示:
<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,布尔值可以有一个'true‘、'false’、'0‘或’1‘)。
但是我找不到内置数据类型的模式规范。
同样,在http://www.w3.org/TR/xmlschema-2上有“数据类型定义的模式”,但对我来说,这个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>但这只会给出一个whiteSpace限制。同样的情况也适用于所有其他数据类型,因此我不理解这个模式如何正确地定义数据类型。
因此,如果有一个模式定义了内置数据类型,那么我在哪里可以找到它呢?...or,我在这里发现了什么吗?
希望我的问题足够清楚:)
提前感谢您的帮助!
发布于 2013-07-26 23:31:42
简短的回答:您可以找到一些近似,但您无法找到XSD内置类型的规范定义,因为(正如您所怀疑的)它们不是使用XSD进行规范定义的。
更长的答案:基本数据类型,包括xsd:boolean,构成了类型系统的基础;即使在原则上,对任何原始类型都不可能有XSD声明。(“原语”一词只是我们给系统中那些必须在系统之外定义的东西起的名字,通常是用散文,而不是在系统内部。)
一般来说,原因很简单: XSD简单类型声明根据现有原语定义新类型,因此任何XSD处理器都必须知道原语,然后才能处理任何XSD类型定义。任何使用XSD定义原语的尝试都会(a)使如此定义的类型从定义上说是派生类型而不是原语,(b)导致无限回归。更具体的术语是:如您所示,我们可以枚举词法形式“true”、“false”、“1”和“0”--但是xsd:枚举仅定义为通过在基类型的值空间中枚举选定的值来限制某些基类型的值空间(在示例中缺失)。但是不能这样定义原语;从形式上讲,它们确实有一个基类型(XSD1.0中的XSD :anySimpleType,XSD1.1中的xsd:anyAtomicType ),但是anyAtomicType的值空间被定义为所有当前和未来原语类型的值空间的合并。基元类型的值空间的性质和从词法空间到值空间的映射性质不能用XSD来定义,它们必须用散文来描述。(例如:枚举列出布尔值;如何定义xsd:anyURI的词法空间?您将如何指定'1‘和'true’都表示相同的值,而'0‘和'false’表示另一个值?
一些内置类型--特别是所有普通的(非原始的)内置类型--原则上可以用XSD语法声明。但是,由于处理器需要对内置类型具有内置知识,为它们提供实际的XSD声明不会带来有用的结果:充其量,您提供的声明将被忽略为不必要和多余的声明;处理器还可能选择在它可能认为试图为已声明的类型提供第二个声明时引发错误。(一个关于内核和标准库的更清晰的故事本可以避免这个问题,但是XSD wg在1.0中没有提供一个干净的故事,而且向后兼容性的考虑意味着wg无法在1.1中清理由此产生的混乱。)
在XSD1.0 模式文档模式中,您将发现所有内置的XSD声明的近似性;您可能会发现非原语的声明不如原语的声明不能令人满意。由于上述原因,所有这些声明都从XSD1.1中的模式文档中移出,变成两个独立的伪模式文档,一个用于原始数据类型,另一个用于普通内置数据类型。
https://stackoverflow.com/questions/17879467
复制相似问题