eugene
Гость
|
[4660]
Пт Июл 11, 2003 11:50
Одновременное задание в XSD схеме паттерна для текста и аттр
Недавно xsd занялся, поэтому извините если в терминах запутаюсь.
Задача такая
есть тэг, который должен содержать определённый текст (соответствующий паттерну) и атрибут. Как задать его описание?
Не работает ни такая конструкция
<xsd:element name="custom-attribute">
<xsd:complexType>
<xsd:restriction base="xsd:string">
<xsd:pattern value="\d{3}-[A-Z]{2}"/>
</xsd:restriction>
<xsd:attribute name="name" type="simpleType.ProductType"/>
</xsd:complexType>
</xsd:element>
Ни такая
<xsd:element name="custom-attribute">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:pattern value="\d{3}-[A-Z]{2}"/>
</xsd:restriction>
<xsd:attribute name="name" type="simpleType.ProductType"/>
</xsd:simpleType>
</xsd:element>
В первом случае ругань на restriction, во втором на attribute. Однакож думаю решение должно быть, уж больно задача выглядит типичной. Может кто направит на правильный путь?
|
shade33
Новичок

Зарегистрирован: 29.04.2002
Сообщения: 37
Откуда: Москва
|
[4662]
Пт Июл 11, 2003 12:16
Во-втором случае, ошибка, как минимум, с SimpleType - он не может содержать атрибутов.
|
Paranorm
Студент
Зарегистрирован: 24.04.2002
Сообщения: 81
|
[4667]
Сб Июл 12, 2003 22:52
Re: Одновременное задание в XSD схеме паттерна
Элемент xsd:restriction может быть дочерним элементом у xs:simpleType, xsd:simpleContent или xsd:complexContent. Два последних элемента (xsd:simpleContent и xsd:complexContent) в свою очередь должны являться дочерними у xsd:complexType.
Однако написать сразу по твоему примеру так:
<xs:complexType>
<xs:simpleContent>
<xs:restriction base="xs:string">
...
мы не сможем, поскольку валидатор не пропустит ограничение простого типа (xs:string) в сложном типе.
Поэтому придется применить немного более сложныую технику, а именно:
Сначала объявим простой тип, основанный на ограничении базового простого типа xs:string по твоему паттерну:
<xs:simpleType name="custom-attribute-base">
<xs:restriction base="xs:string">
<xs:pattern value="\d{3}-[A-Z]{2}"/>
</xs:restriction>
</xs:simpleType>
А затем унаследуем от него твой сложный тип, добавив в него необходимый аттрибут:
<xs:complexType name="custom-attribute">
<xs:simpleContent>
<xs:extension base="custom-attribute-base">
<xs:attribute name="name" type="xs:string" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
Я внес некоторые изменения в твой пример, которые отмечу:
1) Поменял префикс пространства имен схемы с xsd на xs (извините, мне так просто проще)
2) Заменил твой тип simpleType.ProductType на простой xs:string (но, естественно, только потому, что не знаю я такого типа и как он у тебя описан).
Тебе остается вернуть обратно свой simpleType.ProductType и все должно zarabotok.bbspam.com.
Я у себя проверил: все работает - и схема валидируется, и документы этой схемой тоже валидируются.
Бывает же, найдет в субботу вечером настроение Если что не получится - спашивай.
|