У меня есть XSD, определенный для приложения обмена сообщениями. Как часть полезной нагрузки сообщения, мне нужно, чтобы для одного из моих элементов контент был таблицей стилей XSL. Это используется позже при применении преобразования XSL для генерации окончательного форматированного вывода. Обратите внимание, что полезная нагрузка таблицы стилей XSL является решением конечного пользователя, поэтому я не могу просто сделать XSD для проверки ее содержимого. В идеале было бы замечательно, если бы существовал XSD для HTML, потому что я бы просто использовал его в качестве пространства имен для содержимого не-XSL в таблице стилей!
Таким образом, я сделал это (это только часть XSD, но вы получите идеи):
<?xml version="1.0" encoding="Windows-1252"?>
<xs:schema targetNamespace="http://schemas.mycorpname.com/notification"
attributeFormDefault="unqualified" elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://schemas.mycorpname.com/notification">
<xs:import namespace="http://www.w3.org/1999/XSL/Transform" />
<xs:complexType name="renderinginstructions">
<xs:sequence>
<xs:element ref="xsl:stylesheet"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:schema>
Это прекрасно работает и заставляет потребителей включать таблицу стилей XSL в элемент <renderinginstructions>
.
В большинстве случаев таблица стилей XSL должна содержать теги для вывода действительного документа HTML. Однако, когда я помещаю дочерние элементы в определение таблицы стилей, я получаю эту ошибку из Visual Studio:
Если я хочу требовать наличия встроенной таблицы стилей XSL (а не какого-либо другого содержимого!), Правильно ли я создал свой XSD? Что еще я могу сделать? Мне не нравится это предупреждение.
Вот пример типа документа, который вызывает это предупреждение.
ПРИМЕЧАНИЕ. В таблице стилей, если я использую xmlns = "", я получаю только предупреждение. Если я не укажу пространство имен по умолчанию, я не получу предупреждение, но получаю «Сообщение» из Visual Studio с указанием:
"Не удалось найти информацию о схеме для элемента
«http://schemas.mycorpname.com/notification:html'".
Итак, с xmlns=""
я получаю предупреждение. Без этого я получаю тонны «сообщений», связанных с дочерними элементами шаблона xsl:. Не является ли целью XSLT возможность помещать тонны различных элементов в документ? XSLT не подлежат проверке схемы, когда они стоят отдельно?
<?xml version="1.0"?>
<notification xmlns="http://schemas.mycorpname.com/notification">
<renderinginstructions>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="">
<xsl:template match="/">
<html>
<head>This is the head</head>
<body>This is the body.</body>
</html>
</xsl:template>
</xsl:stylesheet>
</renderinginstructions>
</notification>