Статус документа
Статус документа

ГОСТ Р ИСО/МЭК 8825-5-2013 Информационная технология (ИТ). Правила кодирования AСН.1. Часть 5. Отображение определений W3C схемы XML в AСН.1

Приложение D
(справочное)

     
Примеры отображения


Это приложение иллюстрирует отображение версии 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 Простое определение типа, полученное по списку