Примеры отображения
Это приложение иллюстрирует отображение версии 1, описанное в настоящем стандарте, и содержит АСН.1-модуль, соответствующий схеме XSD. Отображение версии 2 аналогичное и отличается (в данном примере) только в использовании XSD-модуля из приложения В вместо XSD-модуля из приложения А.
D.1 Схема, использующая простые определения типа
Следующая схема содержит примеры XSD-встроенных типов (xsd:string, xsd:decimal, xsd:integer, xsd:int, xsd:date), других простых определений типа и сложных определений типа.
<?xml version="1.0" encoding="UTF-8"?> | ||||||||||
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" | ||||||||||
elementFormDefault="unqualified"> | ||||||||||
<xsd:element name="EXAMPLES"> | ||||||||||
<xsd:complexType> | ||||||||||
<xsd:sequence> | ||||||||||
<xsd:element ref="personnelRecord"/> | ||||||||||
<xsd:element name="decimal" | ||||||||||
type="xsd:decimal"/> | ||||||||||
<xsd:element name="daysOfTheWeek" | ||||||||||
type="ListOfDays"/> | ||||||||||
<xsd:element ref="namesOfMemberNations"/> | ||||||||||
<xsd:element ref="fileldentifier" | ||||||||||
maxOccurs="unbounded"/> | ||||||||||
</xsd:sequence> | ||||||||||
</xsd:complexType> | ||||||||||
</xsd:element> | ||||||||||
<xsd:element name="personnelRecord"> | ||||||||||
<xsd:complexType> | ||||||||||
<xsd:sequence> | ||||||||||
<xsd:element name="name" | ||||||||||
type="name"/> | ||||||||||
<xsd:element name="title" | ||||||||||
type="xsd:string"/> | ||||||||||
<xsd:element name="decimal" | ||||||||||
type="xsd:integer"/> | ||||||||||
<xsd:element name="dateOfHire" | ||||||||||
type="xsd:date"/> | ||||||||||
<xsd:element ref="nameOfSpouse"/> | ||||||||||
<xsd:element ref="children"/> | ||||||||||
</xsd:sequence> | ||||||||||
</xsd:complexType> | ||||||||||
</xsd:element> | ||||||||||
<xsd:element name="nameOfSpouse" type="name"/> | ||||||||||
<xsd:complexType name="name"> | ||||||||||
<xsd:sequence> | ||||||||||
<xsd:element name="givenName" type="xsd:string"/> | ||||||||||
<xsd:element name="initial" type="xsd:string"/> | ||||||||||
<xsd:element name="familyName" type="xsd:string"/> | ||||||||||
</xsd:sequence> | ||||||||||
</xsd:complexType> | ||||||||||
<xsd:element name="children"> | ||||||||||
<xsd:complexType> | ||||||||||
<xsd:sequence> | ||||||||||
<xsd:element ref="Childlnformation" | ||||||||||
minOccurs="0" | ||||||||||
maxOccurs="unbounded"/> | ||||||||||
</xsd:sequence> | ||||||||||
</xsd:complexType> | ||||||||||
</xsd:element> | ||||||||||
<xsd:element name="Childlnformation"> | ||||||||||
<xsd:complexType> | ||||||||||
<xsd:sequence> | ||||||||||
<xsd:element name="name" | ||||||||||
type="name"/> | ||||||||||
<xsd:element name="dateOfBirth" | ||||||||||
type="xsd:date"/> | ||||||||||
</xsd:sequence> | ||||||||||
</xsd:complexType> | ||||||||||
</xsd:element> | ||||||||||
<xsd:simpleType name="ListOfDays"> | ||||||||||
<xsd:list itemType="Day"/> | ||||||||||
</xsd:simpleType> | ||||||||||
<xsd:simpleType name="Day"> | ||||||||||
<xsd:restriction base="xsd:string"> | ||||||||||
<xsd:enumeration value="monday"/> | ||||||||||
<xsd:enumeration value="tuesday"/> | ||||||||||
<xsd:enumeration value="wednesday"/> | ||||||||||
<xsd:enumeration value="thursday"/> | ||||||||||
<xsd:enumeration value="friday"/> | ||||||||||
<xsd:enumeration value="saturday"/> | ||||||||||
<xsd:enumeration value="sunday"/> | ||||||||||
</xsd:restriction> | ||||||||||
</xsd:simpleType> | ||||||||||
<xsd:element name="namesOfMemberNations"> | ||||||||||
<xsd:simpleType> | ||||||||||
<xsd:Iist itemType="xsd: string"/> | ||||||||||
</xsd:simpleType> | ||||||||||
</xsd:element> | ||||||||||
<xsd:element name="fileldentifier"> | ||||||||||
<xsd:complexType> | ||||||||||
<xsd:choice> | ||||||||||
<xsd:element name="serialNumber" | ||||||||||
type="xsd:int"/> | ||||||||||
<xsd:element name="relativeName" | ||||||||||
type="xsd:string"/> | ||||||||||
<xsd:element ref="unidentified"/> | ||||||||||
</xsd:choice> | ||||||||||
</xsd:complexType> | ||||||||||
</xsd:element> | ||||||||||
<xsd:element name="unidentified" type="xsd:anyType"/> | ||||||||||
</xsd:schema> |
D.2 Соответствующие АСН.1-определения
Далее приводится соответствующая АСН.1-спецификация и проверка тех же XML-документов, что и в XSD-схеме:
EXAMPLES {joint-iso-itu-t asn1 (1) examples (999) xml-defined- | |||||
types (3)} | |||||
"ACH.1/Examples/XML-defined-types" | |||||
DEFINITIONS | |||||
XER INSTRUCTIONS AUTOMATIC TAGS :: = | |||||
BEGIN | |||||
IMPORTS String, Decimal, Int, Date, AnyType | |||||
FROM XSD | |||||
{joint-iso-itu-t asn1 (1) specification(0) modules (0) xsd- | |||||
module (2) version1 (1)}; | |||||
/* For a Version2 mapping, the last component of the module | |||||
identifier would be | |||||
version2 (2) */ | |||||
EXAMPLES ::= SEQUENCE { | |||||
personnelRecord PersonnelRecord, | |||||
number Decimal, | |||||
daysOf TheWeek ListOfDays, | |||||
namesOfMemberNations NamesOfMemberNations, | |||||
fileldentifier-list [UNTAGGED] | |||||
SEQUENCE (SIZE (1..MAX)) OF fileidentifier | |||||
Fileldentifier } | |||||
PersonnelRecord ::= [NAME AS UNCAPITALIZED] SEQUENCE { | |||||
name Name, | |||||
title XSD.String, | |||||
number INTEGER, | |||||
dateOfHire XSD.Date, | |||||
nameOfSpouse NameOfSpouse, | |||||
children Children } | |||||
NameOf Spouse ::= [NAME AS UNCAPITALIZED] Name | |||||
Name ::= [NAME AS UNCAPITALIZED] SEQUENCE { | |||||
givenName XSD.String, | |||||
initial XSD.String, | |||||
familyName XSD.String } | |||||
Children ::= [NAME AS UNCAPITALIZED] SEQUENCE { | |||||
childlnformation-list [UNTAGGED] | |||||
SEQUENCE OF | |||||
childlnformation [NAME AS CAPITALIZED] Childlnformation | |||||
} | |||||
Childlnformation ::= SEQUENCE { | |||||
name Name, | |||||
dateOfBirth XSD.Date } | |||||
ListOfDays ::= [LIST] SEQUENCE OF Day | |||||
Day ::= ENUMERATED | |||||
{ friday, monday, saturday, sunday, thursday, tuesday, | |||||
wednesday } | |||||
- - Note that 12.4.1.3 specifies use of a lexicographical | |||||
order, as | |||||
- - the members of an enumeration are not ordered in an XML | |||||
Schema | |||||
NamesOfMemberNations ::= [NAME AS UNCAPITALIZED] [LIST] SEQUENCE | |||||
OF | |||||
XSD.String (FROM ({0, 0, 0, 33}..{0, 16, 255, 253})) | |||||
Fileldentifier ::= [NAME AS UNCAPITALIZED] SEQUENCE { | |||||
choice [UNTAGGED] CHOICE { | |||||
serialNumber XSD.Int, | |||||
relativeName XSD.String, | |||||
unidentified Unidentified } } | |||||
Unidentified ::= [NAME AS UNCAPITALIZED] XSD.AnyType | |||||
ENCODING-CONTROL XER | |||||
GLOBAL-DEFAULTS MODIFIED-ENCODINGS | |||||
GLOBAL-DEFAULTS CONTROL-NAMESPACE | |||||
"http://www.w3.org/2001/XMLSchema-instance" PREFIX | |||||
"xsi" | |||||
TEXT Day:ALL | |||||
END |
D.3 Дополнительные примеры
В D.3 все частные примеры (примеры, которые не содержат элемент схемы) предполагают, что XML-элементы, представляющие синтаксис XSD, находятся в рамках декларации пространства имен по умолчанию (default namespace), именем пространства имен которой является целевое пространство имен схемы.
D.3.1 Документы схемы с объектами информации элемента import и include
Следующая схема XSD состоит из двух пространств имен, которые состоят из четырех файлов схемы:
<!--file "http://example.com/xyz/schema.xsd"--> | ||
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" | ||
xmlns:xyz="http://example.com/xyz" | ||
targetNamespace="http://example.com/xyz"> | ||
<xsd:element name="xyz-elem" type="xsd:string"/> | ||
<xsd:complexType name="Xyz-type"> | ||
<xsd:attribute name="xyz-attr" type="xsd:boolean"/> | ||
</xsd:complexType> | ||
</xsd:schema> | ||
<!- - file "http://example.com/abc/main.xsd" - -> | ||
<xsd:schema xmlns:xsd="http://www. w3.org/2001/XMLSchema" | ||
xmlns:xyz="http://example.com/xyz" | ||
xmlns:abc="http://example.com/abc" | ||
targetNamespace="http://example.com/abc"> | ||
<xsd:import namespace="http://example.com/xyz" | ||
schemaLocation="http://example.com/xyz/schema.xsd"/> | ||
<xsd:include schemaLocation="http://example.com/abc/sub1.xsd"/> | ||
<xsd:include schemaLocation="http://example.com/abc/sub2.xsd"/> | ||
<xsd:element name="abc-elem" type="xyz:Xyz-type"/> | ||
</xsd:schema> | ||
<!- - file "http://example.com/abc/sub1.xsd" - -> | ||
<xsd:schema xmlns:xsd="http://www. w3.org/2001/XMLSchema" | ||
xmlns:abc="http://example.com/abc" | ||
targetNamespace="http://example.com/abc"> | ||
<xsd:element name="sub1-elem" type="xsd:string"/> | ||
</xsd:schema> | ||
<!- - file "http://example.com/abc/sub2.xsd" - -> | ||
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" | ||
xmlns:abc="http://example.com/abc" | ||
targetNamespace="http://example.com/abc"> | ||
<xsd:element name="sub2-elem " type="xsd:string"/> | ||
<xsd:attribute name="sub2-attr" type="xsd:string"/> | ||
</xsd:schema> |
Эти четыре документа схемы отображаются в следующих двух модулях АСН.1:
XYZ - - The module reference is not standardized | |||||
DEFINITIONS XER INSTRUCTIONS AUTOMATIC TAGS ::= | |||||
BEGIN | |||||
IMPORTS | |||||
String FROM XSD {joint-iso-itu-t asn1 (1) specification (0) | |||||
modules (0) | |||||
xsd-module (2) version1 (1) } | |||||
/* For a Version 2 mapping, the last component of | |||||
the module | |||||
identifier would be version2 (2) */ | |||||
; | |||||
Xyz-elem ::= [NAME AS UNCAPITALIZED] XSD.String | |||||
Xyz-type ::= SEQUENCE { | |||||
xyz-attr [ATTRIBUTE] BOOLEAN OPTIONAL } | |||||
ENCODING-CONTROL XER | |||||
GLOBAL-DEFAULTS MODIFIED-ENCODINGS | |||||
GLOBAL-DEFAULTS CONTROL-NAMESPACE | |||||
"http://www.w3.org/2001/XMLSchema-instance" | |||||
PREFIX "xsi" | |||||
NAMESPACE ALL AS "http://example.com/xyz" | |||||
PREFIX "xyz" | |||||
END | |||||
ABC - - The module reference is not standardized | |||||
DEFINITIONS XER INSTRUCTIONS AUTOMATIC TAGS ::= | |||||
BEGIN | |||||
IMPORTS | |||||
Xyz-type FROM XYZ | |||||
String FROM XSD {joint-iso-itu-t asn1 (1) specification (0) | |||||
modules (0) | |||||
xsd-module (2) version1 (1) } | |||||
/* For a Version 2 mapping, the last component of | |||||
the module | |||||
identifier would be version2 (2) */ | |||||
; | |||||
Abc-elem ::= [NAME AS UNCAPITALIZED] Xyz-type | |||||
Subl-elem ::= [NAME AS UNCAPITALIZED] XSD.String | |||||
Sub2-elem ::= [NAME AS UNCAPITALIZED] XSD.String | |||||
Sub2-attr ::= [NAME AS UNCAPITALIZED] [ATTRIBUTE] XSD.String | |||||
ENCODING-CONTROL XER | |||||
GLOBAL-DEFAULTS MODIFIED-ENCODINGS | |||||
GLOBAL-DEFAULTS CONTROL-NAMESPACE | |||||
"http://www.w3.org/2001/XMLSchema-instance" | |||||
PREFIX "xsi" | |||||
NAMESPACE ALL AS "http://example.com/abc" | |||||
PREFIX "abc" | |||||
END |
D.3.2 Отображение простых определений типа
D.3.2.1 Простое определение типа, полученное ограничением
Для полного набора примеров простых ограничений типа см. примеры фасетов в D.3.3.
D.3.2.2 Простое определение типа, полученное по списку