XHTML+XML (and XML+XHTML) + XSD(DTD) validation = ??? :(((

dimgel

Новичок
XHTML+XML (and XML+XHTML) + XSD(DTD) validation = ??? :(((

Всем привет. Посоветовали ваш форум, помогите плиз кто сталкивался.

Мне нужно редактировать XHTML+XML (XHTML со вставками элементов из других пространств имен, и XML со вставками XHTML) с валидацией при сохранении. Потом отдавать это на вход XSLT, и на выходе получать валидный XHTML.

В данный момент пользуюсь XMLSpy 2004. Вставлять куски XHTML (xmlns="http://www.w3.org/1999/xhtml") внутрь своего XML несложно:

XSD:
Импортированы схемы слитые с http://www.w3.org/2002/08/xhtml/xhtml1-strict.xsd и http://www.w3.org/2001/xml.xsd (вторая импортируется в первую).

Код:
<xs:schema xmlns="my" xmlns:xs="http://www.w3.org/2001/XMLSchema" 
		elementFormDefault="qualified" attributeFormDefault="unqualified">
	<xs:import namespace="http://www.w3.org/1999/xhtml" 
			schemaLocation="w3c/xhtml1-strict.xsd"/>
	<xs:element name="root">
		<xs:complexType mixed="true">
			<xs:sequence minOccurs="0" maxOccurs="unbounded">
				[b]<xs:any namespace="http://www.w3.org/1999/xhtml" 
						processContents="strict"/>[/b]
			</xs:sequence>
		</xs:complexType>
	</xs:element>
</xs:schema>

Но при этом валидация XHTML не производится :( , т.е. следующий код XMLSpy сохраняет без сообщения об ошибке:

XML:

Код:
<root xmlns="my" xmlns:h="http://www.w3.org/1999/xhtml" 
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
		xsi:noNamespaceSchemaLocation="my.xsd">
	[b]<h:strong1>hi</h:strong1>[/b]
</root>
А при создании попытке вставить элементы своего пространства имен в валидный XHTML, XMLSpy ругается: "Unexpected child element my:my-data":

XHTML:

Код:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
		"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:my="my">
	<head>
		<title>Enter the title of your XHTML document here</title>
	</head>
	<body>
		<p>Enter the body text of your XHTML document here</p>
		[b]<my:my-data/>[/b]
	</body>
</html>

Подскажите плиз, как обустроить себе редактор, чтобы проводил валидацию и XHTML, и XML при сохранении? Моей квалификации тут резко не хватает. :(((

-~{}~ 01.04.06 21:59:

Сорри, в одном месте я дурканул - задал в XML noNamespaceSchemaLocation вместо schemaLocation. Вот так всё работает - и валидация, и auto-completion:

Код:
<root xmlns="my" xmlns:x="my" xmlns:h="http://www.w3.org/1999/xhtml" 
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
		xsi:schemaLocation="http://www.w3.org/1999/xhtml my.xsd">
	<strong xmlns="http://www.w3.org/1999/xhtml">hi
		<em>shit</em>
	</strong>
</root>
Но проблема с вставкой XML в XHTML остается. Боюсь, придется подкрутить xhtml1-schema.xsd... Как бы попроще, чтобы сразу разрешить у всех элементов дочки из других пространств имен? :-/
 

ViJu

Новичок
Offtop:
Вопрос: а XMLSpy 2005 не пробовали, там ведь после 2004 много bugfix'ов, и добавлено много

а AltovaXML2006 - вообще сказка, бесплатный консольный xml/xslt2/xquery процессор, на windows можно смело использовать вместо xsltproc

А так главная проблема в том, что автокомплит не пашет?
 

dimgel

Новичок
Главная проблема - validation при сохранении ругается. :(

Валидация XHTML меня не сильно волнует (хотя хотелось бы), а вот в своих XML-вставках я вечно путаюсь - у меня тыща версий одних и тех же схем в разных сайтах (эволюция блин). Ну и автокомлишн не помешал бы.

2005 попробую, сенкс... если найду (в свое время не нашел). Информация об xslt2/xquery меня вообще изумила - спасибо огромное. Последний год вообще нет времени за новинками следить. Сегодня обязательно посмотрю, на какой стадии эти стандарты. Я правиьно понял, что XML2006 можно вызывать из PHP как внешнюю команду? Интересно, почему только под windows. :(
 
Сверху