Последние несколько лет я работаю над изучением XML-схемы, время от времени. У меня есть довольно хорошие знания по основам, но одна вещь все еще ускользает от меня:
Я хочу создать XML-документ, подобный следующему:
<itemList xmlns="http://mydomain.com/namespaceA">
<item>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:nsB="http://mydomain.com/namespaceB">
<body>
<p>Any HTML code here but I want to be able to mark up
<nsB:myBTag><strong>some</strong> of the text</nsB:myBTag>
with tags from namespaceB even if those tags are nested within
standard HTML tags and even if there are then more HTML tags
nested within my namespaceB tags.</p>
</body>
</html>
</item>
</itemList>
Обратите внимание, что внутри элемента <html>
пространство имен xhtml является пространством имен по умолчанию. Это потому, что я хочу, чтобы авторы документов могли использовать стандартный редактор HTML, а затем просто вставлять специальные теги namespaceB туда, где они нужны. В любом экземпляре документа будет гораздо больше тегов XHTML, чем тегов namespaceB.
Итак, из того, что я предварительно извлек урок, я думаю, что мои две схемы должны будут выглядеть примерно так:
namespaceA
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:nsA="http://mydomain.com/namespaceA"
targetNamespace="http://mydomain.com/namespaceA">
<xs:element name="itemList">
<xs:complexType>
<xs:sequence>
<xs:element name="item" maxOccurs="unbounded" minOccurs="1">
<xs:complexType>
<xs:any namespace="http://www.w3.org/1999/xhtml"
minOccurs="1" maxOccurs="1"
processContents="strict">
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
(Я думаю, что единственное пространство имен, которое мне нужно объявить для модели содержимого в теге <item>
, - это пространство имен XHTML, потому что тогда тег <html>
в экземпляре документа объявляет пространство имен namespaceB, но я ни в коем случае не уверен .)
namespaceB
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:nsB="http://mydomain.com/namespaceB"
targetNamespace="http://mydomain.com/namespaceB">
<xs:element name="myBTag">
<!-- I am clueless here -->
<!-- I have no idea how to make sure that additional HTML tags
can go in here without screwing everything up -->
</xs:element>
</xs:schema>
Большой вопрос: нужно ли что-то делать, чтобы убедиться, что теги XHTML и namespaceB могут свободно смешиваться или это только часть или часть операции тега <xs:any>
?
Естественно, мои схемы и документы будут намного сложнее, чем эта. Я упростил их для облегчения обсуждения. Заранее благодарим за любую помощь, которую вы можете предоставить. Если мне удастся преодолеть это препятствие, я смогу создать действительно мощную систему образовательного контента, которая поможет обучать весь мир бесплатно.