Что такое различие между XML-схемой и DTD?

Используйте M2Crypto. Вот то, как проверить для RSA и любого другого алгоритма, поддерживаемого OpenSSL:

pem = """-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDfG4IuFO2h/LdDNmonwGNw5srW
nUEWzoBrPRF1NM8LqpOMD45FAPtZ1NmPtHGo0BAS1UsyJEGXx0NPJ8Gw1z+huLrl
XnAVX5B4ec6cJfKKmpL/l94WhP2v8F3OGWrnaEX1mLMoxe124Pcfamt0SPCGkeal
VvXw13PLINE/YptjkQIDAQAB
-----END PUBLIC KEY-----""" # your example key

from M2Crypto import BIO, RSA, EVP
bio = BIO.MemoryBuffer(pem)
rsa = RSA.load_pub_key_bio(bio)
pubkey = EVP.PKey()
pubkey.assign_rsa(rsa)

# if you need a different digest than the default 'sha1':
pubkey.reset_context(md='sha1')
pubkey.verify_init()
pubkey.verify_update('test  message')
assert pubkey.verify_final(signature) == 1

162
задан nbro 31 March 2016 в 23:32
поделиться

4 ответа

Из раздела Различия между DTD и схемой статьи Преобразование DTD в схему :

Важное различие между DTD а XML-схема - это XML-схема использовать синтаксис на основе XML, тогда как DTD имеют уникальный синтаксис из SGML DTD. Хотя DTD часто критикуют из-за этой необходимости чтобы изучить новый синтаксис, синтаксис сам по себе довольно лаконичный. Напротив верно для XML-схемы, которые подробный, но также используйте теги и XML, чтобы авторы XML нашли синтаксис XML-схемы меньше intimidating.

The goal of DTDs was to retain a level of compatibility with SGML for applications that might want to convert SGML DTDs into XML DTDs. However, in keeping with one of the goals of XML, "terseness in XML markup is of minimal importance," there is no real concern with keeping the syntax brief.

[...]

Итак, какие еще отличия могут быть особенно важными при преобразовании DTD? Давайте посмотрим.

Typing

Наиболее существенное различие между DTD и схемой XML - это возможность создавать и использовать типы данных в схеме вместе с объявлениями элементов и атрибутов. Фактически, это настолько важное различие, что половина Рекомендации по схеме XML посвящена типу данных и схеме XML. Мы подробно рассмотрим типы данных в Части III этой книги «Типы данных схемы XML».

[...]

Ограничения вхождения

Другая область, в которой DTD и схема существенно различаются, - это ограничения вхождений. Если вы помните из наших предыдущих примеров в главе 2 «Структура схемы» (или вашей собственной работе с DTD), есть три символа, которые вы можете использовать для ограничения количества вхождений элемента: *, + и?.

[...]

Перечисления

Итак, допустим, у нас есть элемент, и мы хотели иметь возможность определять атрибут размера для рубашки, который позволял пользователям выбирать размер: маленький, средний , или большой. Наше DTD будет выглядеть так:

 


 

[...]

Но что, если мы хотим, чтобы size был элементом? Мы не можем этого сделать с DTD. DTD не обеспечивают перечисления в текстовом содержимом элемента. Однако из-за типов данных со схемой, когда мы объявили перечисление в предыдущем примере, мы фактически создали simpleType с именем size_values ​​, который теперь мы можем использовать с элементом:

 < xs: element name = "size" type = "size_value">
 

[...]

124
ответ дан 23 November 2019 в 21:22
поделиться

DTD предшествует XML и, следовательно, сам не является допустимым XML. Вероятно, это главная причина изобретения XSD.

16
ответ дан 23 November 2019 в 21:22
поделиться

Еще одно отличие состоит в том, что в DTD модель содержимого элемента полностью определяется его именем, независимо от того, где оно появляется в документе. Итак, предположим, вы хотите иметь дочерний элемент name вашего элемента person , который сам имеет дочерние элементы первый и последний . Затем, если вы хотите иметь дочерний элемент name для элемента city в том же документе, ему также потребуются дочерние элементы сначала и последняя . В отличие от этого, XML-схема позволяет объявлять типы дочерних элементов локально, поэтому в этом случае вы можете объявить дочерние элементы name для обоих person и city отдельно, предоставление им соответствующих моделей контента в этих контекстах.

Другое важное отличие - это поддержка пространств имен. Поскольку DTD являются частью исходной спецификации XML (и унаследованы от SGML), они вообще не знают пространства имен, поскольку пространства имен XML были указаны позже. Вы можете использовать DTD в сочетании с пространствами имен, но это требует некоторых искажений, таких как принудительное определение префиксов в DTD и использование только этих префиксов вместо возможности использовать произвольные префиксы.

Для меня другие различия в основном заключаются в поверхностный. В DTD можно легко добавить поддержку типов данных, а синтаксис - это просто синтаксис. (Я, например, нахожу синтаксис XML-схемы ужасным и никогда не хотел бы вручную поддерживать XML-схему, чего я бы не сказал о схемах DTD или RELAX NG; если мне по какой-то причине нужна XML-схема,

8
ответ дан 23 November 2019 в 21:22
поделиться

DTD is pretty much deprecated because it is limited in its usefulness as a schema language, doesn't support namespace, and does not support data type. In addition, DTD's syntax is quite complicated, making it difficult to understand and maintain..

2
ответ дан 23 November 2019 в 21:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: