Uri пространства имен 1с что это
URI — сложно о простом (Часть 1)
Появилось таки некоторое количество времени, и я решил написать сий пост, идея которого возникла уже давно.
Связан он будет будет с такой, казалось бы, простой вещью, как URI, детальному рассмотрению которой в рунете уделяется как-то мало внимания.
«Пфф, ссылки они и в Африке ссылки, чего тут разбираться?» — скажете вы, тогда я задам вопрос:
Перед тем как начать хотел бы обозначить, что есть пост на схожую тему, в котором все обозначено проще и немного понятнее. Целью же этого поста, я ставлю более глубокое изучение вопроса и сбор информации об URI в одном месте, дабы «не потерять». Ну, почти в одном месте, статья будет разделена на две части
А для удобства бахнем оглавление, которое работает не без особенностей URI, которую мы рассмотрим попозжа, в этой статье.
Ознакомление
1. URI
Унифицированный Идентификатор Ресурса, в простонародье — URI
Самое свежее описание того, чем же все-таки являются эти пресловутые URI датируется январем аж 2005-го, а именно RFC3986, написанный самим Тимом Бёнесом-Ли, родоначальника всеми нами любимого тырнета.
Резюмируя п.1.1 можно сформулировать определение:
Многие из вас замечали, что на разных ресурсах ссылки называют то URL, то URI и, вероятно, становилось интересно — какой же из вариантов правильный?
Дело в том, что URL увидел свет и был документирован в 1990 году, в то время как URI был документирован лишь в 1994 году. И вплоть до 2002 года, до выхода RFC3305, уместными были оба варианта именования, что, порой вносило путаницу.
В п.2 RFC3305 сообщается об устаревании такого термина как URL, применимо к ссылкам, и что отныне верным будет именование URI, с того момента, во всех документах W3C использует термин URI. Исходя из этого, применяя термин URL к соответствующим ссылкам, вы не делаете смысловой ошибки, но делаете ее с точки зрения правильного именования.
Так же примечателен тот момент, что вплоть до выхода RFC2396, в 1997 году, URI расшифровывался как Universal Resource Identifier, что можно увидеть в RFC1630
1.1. Синтаксис
URI составлен из ограниченного набора символов, состоящих из цифр, букв и нескольких графических символов, все эти символы вписываются в кодировку US-ASCII (ASCII). Зарезервированное подмножество символов может использоваться, чтобы разграничить компоненты синтаксиса в URI, в то время как остающиеся символы: не зарезервированный набор и включая те зарезервированные символы, которые не действуют как разделители в данной компоненте URI, определяют данные идентификации каждого компонента.
Зарезервированные символы
Не зарезервированные символы
Для данного случая, согласно ABNF :
ALPHA — любая буква верхнего и нижнего регистров кодировки ASCII (в regExp [A-Za-z])
DIGIT — любая цифра (в regExp 5)
HEXDIG — шестнадцатиричная цифра (в regExp [0-9A-F])
Процентное кодирование
Т.о., %20, например, означает пробел.
1.2. Компоненты URI
где в квадратных скобках опциональные компоненты
Переходя по указанной в оглавлении ссылке, браузер производит переход ко вторичному ресурсу относительно данной страницы, т.е. скроллит вниз, до появления нужного на экране.
На этом, пожалуй, знакомство с URI можно закончить и начать углубляться в отдельные подвиды URI, а именно
2. URL
URL используются, чтобы определить местоположение ресурсов, обеспечивая абстрактную идентификацию расположения ресурса. Определив местоположение ресурса, система может выполнить множество операций на ресурсе, которые могут быть характеризованы такими словами как ‘доступ’, ‘обновление’, ‘замена’, ‘поиск атрибутов’. В целом только метод доступа должен быть определен для любой схемы URL.
2.1. Структура
В целом, URL имеет схожую структуру, для всех схем, хотя для каждой отдельно взятой схемы, структура может отличаться от общего шаблона.
Графически ее можно выразить в следующем виде:
3. URN
Унифицированные имена ресурсов (URN) предназначены, чтобы служить постоянными, независимыми от расположения, идентификаторами ресурсов и разработаны для упрощения отображения других пространств имен (которые совместно используют свойства URN) в URN-пространство. Таким образом, синтаксис URN обеспечивает средство закодировать символьные данные в форме, которая может быть отправлена посредством существующих протоколов, записана при помощи большинства клавиатур, и т.д.
3.1. Структура
Самоидентифицирующийся URN
Такие URN содержат в NID название хэш-функции, а в NSS значение хэша, вычисленного для идентифицируемого объекта. Такие ссылки используются в magnet-ссылках и заголовках p2p-сети Gnutela2.
Например, URN из magnet-ссылки с одного торрент-трекера:
magnet:?xt=urn:btih:c68abc1ba9b8c7c4bc373862cad1a8c01d69e53d.
С теорией все, во второй части рассмотрим, что можно и что нужно делать с URI, если мы их обрабатываем, а именно — нормализация, разбор и т.д.
За сим откланяюсь, спасибо что читали, надеюсь не было скучно, удачи!
Заметки 1С-Программиста
Цель блога описать интересные и полезные примеры программирования в системе 1С:Предприятие 8.
Страницы
воскресенье, 14 октября 2012 г.
1С:Предприятие 8. Веб-сервисы. Реализация веб-сервиса
Для создания самого простого веб-сервиса необходимо:
Имя веб-сервиса можно задать русское. И платформа его сохранит и опубликует, но рекомендую использовать латиницу в названиях веб-сервисов, ws-операций, параметров ws-операций. Например, chrome не смог отобразить wsdl файл веб-сервиса с русским именем.
Перейдите на вкладку «Прочее» и укажите параметр «URI пространство имен».
Поле «Пакеты XDTO» не обязательное. Оно определяет набор пакетов XDTO в которых вы можете оказать свои типы значений. Это не обязательное поле, по умолчанию вам всегда доступны типы пространства имен «http://www.w3.org/2001/XMLSchema». О пакетах XDTO я расскажу чуть позже.
«Имя файла публикации», это имя файла, в котором хранятся настройки веб-сервиса для Apache(путь к базе и другие) после публикации. Папка, в которой находится этот файл, определяется при публикации. О публикации на веб-сервере будет рассказано позже.
Веб-сервис создан, но еще нет ни одной функции которую он мог бы исполнить. Надо добавить операцию. Для этого добавьте в созданный веб-сервис операцию. Нажмите не веб-веб-сервис правой кнопкой и выберите «Добавить-Операция». Она будет к вашему операнду прибавлять 2 и возвращать значение. Давайте назовем ее «Plus2». Можно указать и русское название, многие клиенты его обработают, но все же могут возникнуть проблемы.
«Тип возвращаемого значения» это тип описанный в указанном вами пакете XDTO или же тип из пространства имен «http://www.w3.org/2001/XMLSchema». Именно в этом типе веб сервис будет возвращать значение.
«Возможно пустое значение» признак что ws-операция может не вернуть значение( nillable =» true » ).
«В транзакции» указывает что код веб-сервиса будет выполняться в транзакции. А «Режим управления блокировкой данных» определяет тип блокировки данных при транзакции по умолчанию.
Установим тип возвращаемого значения в int. В поле «Имя метода» укажем имя «Plus2» для нового метода, который будет выполнять обработку. При нажатии на лупу метод будет автоматом создан в модуле веб-сервиса.
Напишем простой код.
Функция Plus2(Параметр)
Возврат Параметр+2;
КонецФункции
Вы заметили что на входе функции у нас есть параметр «Параметр». Для того что бы в метод этот параметр был передан надо добавить его в дереве метаданных. Для этого щелкните правой кнопкой по веб-операции Plus2 и выберите «Добавить-Параметр».
Давайте назовем его «Param». Названия параметров тоже можно указывать русскими, мало того класс SoapClient языка PHP работает с ними корректно, ведь параметры передаются через массив. Желательно использовать кодировку UTF-8.
Укажем «Тип значения» int из пространства имен «http://www.w3.org/2001/XMLSchema».
Свойство «Возможно пустое» указывает что можно передать значение null в веб-операцию.
«Направление передачи» указывает по значению или по «ссылке» передается операнд в ws-операцию. Возможные значение «Входной», «Выходной», «Входной-Выходной». Таким образом если вы для параметра укажете «Выходной» или » Входной-Выходной » то сможете менять значения операнда. В результате xml сообщение-ответ дополнится строкой с новым значением операнда. Я пока не сталкивался с задачами которые можно решить только используя Выходное направление операнда, потому не могу дать какие то комментарии по этому свойству.
Вот в принципе и всё! Веб сервис создан, но существует он пока что только как описание в вашей конфигурации. Для того что бы им воспользоваться надо его опубликовать на вашем веб-сервере. Как опубликовать вы можете прочитать в статье 1С:Предприятие 8. Веб-сервисы. Публикация и тестирование.
Профессия — 1С
рубрики: Web-Сервисы | Дата: 1 июля, 2017
Итак, у нас есть работающий веб-сервер. Теперь самое время заняться разработкой и публикацией веб-сервисов.
Воспользуемся для этого бесплатной учебной версией платформы 1С, благо ограничений на работу с веб-сервисами в ней нет.
Добавление Web-сервиса в метаданные
Открываем дерево конфигурации, ветка Общие, далее Web-сервисы, добавляем новый веб-сервис (назову его my_ws) и заполняем свойства как показано на рисунке.
Необходимо сделать несколько пояснений о свойствах веб-сервисов
Операции веб-сервиса
Чтобы обеспечить функционирование веб-сервиса, необходимо создать для него операции, которые будут выполнять определенные действия, а при необходимости и возвращать нужные данные.
В качестве примера создадим для нашего веб-сервиса операцию, которая будет возвращать классическую фразу «Привет мир!». Назовем ее Hello:
В модуле веб-сервиса создадим функцию ПриветМир(), ссылку на которую вставим в соответствующее свойство операции.
Но у этой операции есть один недостаток. В нее нельзя передавать исходные данные. Для этих целей в операциях веб-сервисов используется подчиненные им объекты — Параметры.
Добавим еще одну операцию — HelloUsr, и создадим для нее параметр Name.
Эта операция будет у нас возвращать приветствие пользователю при помощи вызова вот такой функции:
Публикация Web-сервиса
Теперь у нас все готово для публикации веб-сервиса. Для этого необходимо зайти в конфигуратор под правами администратора. Щелкаем по ярлыку 1С правой кнопкой и выбираем соответствующий пункт меню:
В меню выбираем Администрирование —> Публикация на веб-сервере
В открывшемся окне прописываем имя публикации, отмечаем пункт Публиковать Web-сервисы и также отмечаем созданный нами веб-сервис:
Нажимаем Опубликовать, после чего надо перезапустить веб-сервер.
WS-ссылки
Для работы с веб-сервисами используется такой объект 1С как WS-ссылка. Она представляет собой WSDL описание веб-сервиса полученное путем импорта из источника на котором расположен веб-сервис. То есть в первую очередь нам надо знать адрес по которому мы сможем получить WSDL описание веб-сервиса. Применительно к нашему примеру в соответствии с настройками, которые мы делали в процессе создания и публикации веб-сервиса этот адрес будет выглядеть следующим образом
Рассмотрим из каких же частей состоит этот адрес.
После публикации веб-сервиса, для того чтобы убедиться, что он успешно опубликован, можно ввести адрес его WSDL описания в адресную строку браузера. При этом мы должны получить в окне браузера XML файл примерно вот такого содержания:
Работа с WS-ссылками возможна двумя способами:
Рассмотрим каждый из этих способов
Динамические WS-ссылки
В этом случае WS-ссылка создается программно. Продолжим наш пример и приведем текст процедуры, которая задействует операцию HelloUsr нашего веб сервиса:
Как нетрудно догадаться, результатом выполнения этой процедуры будет текст в окне сообщения «Привет, Вася!»
Статические WS-ссылки
Вместо программного создания объекта WSОпределения мы можем непосредственно в дереве конфигурации создать объект метаданных WS-ссылка. В процессе создания будет выведено окно с предложением указать адрес WSDL определения для его импорта:
После этого мы можем в коде ссылаться непосредственно на эту WS-ссылку. И процедура по обращению к веб-сервису примет вот такой вид:
XML пространства имен
Пространства имен позволяют избежать конфликта имен XML элементов.
Конфликты имен
В XML имена элементов определяет разработчик. Часто это становится причиной конфликта имен при попытке одновременного использования нескольких XML документов от разных XML приложений.
Следующий код XML содержит информацию о HTML таблице:
Следующий код XML содержит информацию о столе (предмет мебели), который по англ. тоже table:
Если эти два фрагмента кода XML будут сведены вместе, то возникнет конфликт имен. Так как оба документа содержат элемент , хотя и с разным контентом и значением.
Пользователь или XML приложение не будут знать, каким образом обрабатывать эти различия.
Разрешение конфликта имен при помощи префикса
В XML избежать конфликта имен можно при помощи префикса имени элемента.
Следующий код XML содержит информацию о таблице HTML и о столе:
В этом примере не будет конфликта имен, так как два элемента имеют разные имена.
Пространства имен XML – Атрибут xmlns
При использовании в XML префиксов необходимо определить, так называемое, пространство имен префикса.
Пространство имен определяется благодаря атрибуту xmlns в начальном теге элемента.
В данном примере, атрибут xmlns в теге определяет префиксам h: и f: квалифицирующее пространство имен.
Когда пространство имен определено для какого-то элемента, то все его дочерние элементы с тем же префиксом ассоциируются с его пространством имен.
Пространства имен могут декларироваться либо непосредственно в самом элементе, либо в корневом элементе XML документа:
Замечание: URI пространства имен не используется парсером для получения какой-либо информации. Цель всего этого состоит в том, чтобы дать пространству имен уникальное имя. Тем не менее, часто компании используют пространство имен, как указатель на веб-страницу с информацией об этом пространстве имен.
Унифицированный идентификатор ресурса (URI)
Унифицированный идентификатор ресурса (URI) это символьная строка, идентифицирующая интернет-ресурс.
В наиболее общей форме URI является единым указателем ресурса (URL), который идентифицирует доменный адрес в интернете. Другой, более частный вид URI — единообразное имя ресурса (URN).
В наших примерах мы будем использовать только URL.
Пространства имен по умолчанию
Определение пространства имен по умолчанию позволяет избежать использования префиксов во всех дочерних элементах. Такое определение имеет следующий синтаксис:
Следующий код XML содержит информацию о таблице HTML:
Следующий код XML содержит информацию о предмете мебели — столе:
Реальное использование пространства имен
XSLT — это XML язык, который может использоваться для преобразования документов XML в другие форматы, например, HTML.
Пример обмена через XDTO в 1С 8.3
Механизм XDTO
XDTO (XML Data Transfer Objects) — это специальный механизм, разработанный фирмой 1С для универсального представления данных, используемый при взаимодействии с внешними системами.
С помощью механизма XDTO можно описать систему типов и значений, с помощью которой можно легко выполнить сериализацию/десериализацию в XML/JSON.
XDTO можно сравнить со схемой XML. С помощью механизма XDTO можно создать XML-схему, а потом на основании этой схемы сформировать XML-документ.
XDTO может применяться в следующих случаях:
Создание XDTO-пакета
В качестве примера рассмотрим следующую задачу: нужно настроить обмен документами между двумя различными конфигурациями на 1С. В обеих конфигурациях используются 2 типа документов: приходные и расходные накладные. Состав и наименование реквизитов в разных конфигурациях отличается.
Для обмена будет использоваться определенный формат следующего вида:
Есть корневой элемент Документ, который имеет 2 свойства: Тип и Состав. Состав включает в себя массив строк со свойствами: Номенклатура, Количество и Сумма.
Для описания данного формата будем использовать XDTO-пакет. XDTO-пакет можно сравнить со схемой XML, в нем мы укажем какие типы будут использоваться внутри пакета и каким образом они должны быть сериализованы в XML.
В дереве метаданных в узле Общие — XDTO-пакеты добавим новый пакет. В свойствах нового пакета нужно указать URI пространства имен. Здесь нужно указать произвольный идентификатор, как правило он указывается в формате URL, например http://www.program1s.com/test-document:
На вопрос «Произвести изменение URI пространства имен для ссылок на типы данного пакета» ответим Нет, так как наш пакет еще нигде не использовался:
Добавим в пакет новый Тип объекта:
В свойствах укажем Имя Документ:
Это корневой узел нашего формата.
Теперь нужно добавить для него 2 свойства: Тип и Состав. Для этого выделим в пакете тип Документ и выберем Добавить — Свойство:
В свойствах укажем Имя Тип:
В данном свойстве будет строкой храниться тип выгружаемого документа. Поэтому нужно заполнить свойство Тип, чтобы при записи в XML платформа знала как нужно его сериализовать.
Чтобы заполнить тип сначала нужно нажать на зеленую галочку возле свойства:
Появится кнопка с тремя точками для выбора типа. Нужно нажать на нее. Будет открыто окно для выбора пакетов XDTO. В самом низу нужно найти пакет с пространством имен http://www.w3.org/2001/XMLSchema, развернуть его и найти тип string:
Данный тип соответствует типу 1С Строка.
Добавим для объекта Документ еще одно свойство Состав, но тип пока заполнять не будем. Должно получиться так:
Теперь добавим новый тип объекта Состав. Он будет использоваться для сериализации табличной части документа. Добавим для него одно свойство Строка, тип пока не будем указывать:
Это означает, что в данном свойстве может храниться неограниченное количество значений (аналогично массиву).
Теперь для свойства Документа Состав в качестве типа укажем только что созданный объект Состав. Чтобы его выбрать нужно развернуть пространство имен созданного нами XDTO-пакета:
Добавим в пакет еще один тип объекта — Строка, а у него 3 свойства: Номенклатура, Количество и Сумма:
Для свойства Номенклатура в качестве типа укажем тип string из пространства имен http://www.w3.org/2001/XMLSchema. Для свойств Количество и Сумма выберем тип decimal из того же пространства имен. Тип decimal соответствует типу Число в 1С:
И наконец для свойства Строка объекта Состав укажем тип Строка (только что созданный нами тип объекта):
На этом создание XDTO-пакета завершено. Для удобства переименуем его в Документ (нужно щелкнуть по пакету правой кнопкой, выбрать Свойства и изменить свойство Имя):
Сериализация XDTO в XML
Теперь напишем простую процедуру для сериализации приходного документа в XML через механизм XDTO.
Сначала рассмотрим некоторые понятия, которые будут использоваться в процессе сериализации:
Фабрика XDTO — это описание всех типов, которые есть в текущей конфигурации. В том числе она будет включать в себя типы из созданного нами XDTO-пакета, так как пакет входит в состав конфигурации.
Тип XDTO — это один из описанных типов в XDTO-пакетах. В нашем случае это будут типы: Документ, Состав и Строка.
Объект XDTO — это программный объект, соответствующий одному из типов XDTO. В нашем случае это будут объекты Документ, Состав и Строка. У каждого объекта могут быть свойства, например для объекта Документ это будут свойства Тип и Состав, для объекта Строка — Номенклатура, Количество и Сумма и т.д.
Алгоритм сериализации будет выглядеть следующим образом: