2013-07-26 2 views
0

Могу ли я найти определения xsd для встроенных типов данных в любом месте или они не определены с помощью xsd?Встроенные определения типов данных

К примеру, я бы предположил, что хз: логический тип данных будет определен что-то вроде этого:

<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, булево может иметь один «истинный» значения, 'false', '0' или '1'.)

Но я не могу найти спецификацию схемы для встроенных типов данных.

Опять же, на http://www.w3.org/TR/xmlschema-2 есть «Схема для определения типов данных», но для меня эта ссема действительно не определяет многое. Опять же, логический типа определяется как это в этой схеме:

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

, но это дает лишь пробельное ограничение. То же самое относится ко всем другим типам данных, поэтому я не понимаю, как эта схема правильно определяет типы данных.

Итак, если есть схема, которая определяет встроенные типы данных, где я могу ее найти? ... или я что-то не понимаю?

Надеюсь мой вопрос достаточно ясно :)

Заранее спасибо за любую помощь!

ответ

0

Короткий ответ: вы можете найти некоторые приближения, но вы не можете найти нормативные определения встроенных типов XSD, потому что (как вы подозревали) они не являются нормативно определенными с использованием XSD.

Более длинный ответ: примитивные типы данных, включая xsd: boolean, образуют основу системы типов; невозможно даже в принципе, чтобы было объявление XSD для любого примитивного типа. (Термин «примитив» - это просто имя, которое мы даем тем вещам в системе, которые должны быть определены вне системы, обычно в прозе, а не внутри системы.)

В общих чертах, причина проста : Объявления простого типа XSD определяют новые типы с точки зрения существующих примитивов - поэтому примитивы должны быть известны любому XSD-процессору, прежде чем он сможет обрабатывать любые определения типа XSD. Любая попытка определить примитивы с использованием XSD (а) сделает типы, определенные таким образом, по определению производными типами вместо примитивов и (б) приведет к бесконечному регрессу. Более конкретно: мы можем перечислять лексические формы «true», «false», «1» и «0», как вы показываете, но xsd: перечисление определяется только как способ ограничения пространства значений некоторой базы тип (отсутствует в вашем примере) путем перечисления выбранных значений в пространстве значений этого базового типа. Но примитивы не могут быть определены таким образом; для формальных целей они имеют базовый тип (xsd: anySimpleType в XSD 1.0, xsd: anyAtomicType в XSD 1.1), но пространство значений anyAtomicType определяется (в прозе) как объединение пространств значений всех текущих и будущих примитивных типов. Природа пространств значений примитивных типов и характер отображения из лексического пространства в пространство значений не могут быть определены в XSD; они должны быть даны в прозе. (Например: в вашем перечислении перечислены значения логических значений, как можно определить определение лексического пространства для 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.

Смежные вопросы