2013-10-02 4 views
-1

У меня очень мало знаний в xsd и в срочной необходимости решения мелкой проблемы. Мне нужно определить элемент (названный тег), который может иметь любой тип и количество дочерних элементов (и текстов), но не должен содержать пустую строку. Пример: <tag1> совместно <sub1/sub1> < б1 > лазера </b1 > </tag1 >, <tag1> ш2 </tag1 >, <tag1> <i1> лазера </i1 > </tag1 > (допустим, что даже <tag1> <i1> </i1 > </tag1 > также разрешено). Но <tag1> </tag1 > не допускается. Пожалуйста, дайте мне знать, если есть очень простой способ сделать это.Элемент с дочерними элементами любого типа, за исключением пустой строки

ответ

1

Если вы используете XSD 1.1, вы можете использовать утверждение для проверки состояния вы описываете:

<xs:element name="tag" type="non-empty"/> 
<xs:complexType name="non-empty"> 
    <xs:sequence minOccurs="0" maxOccurs="unbounded"> 
    <xs:any/> 
    </xs:sequence> 
    <xs:assert test="child::* or not(string(.) eq '')"/> 
</xs:complexType> 

В XSD 1.0, есть не совсем такой простой подход; если бы я был вами и работал в XSD 1.0, я бы изменил дизайн на что-то более легкое для выражения в XSD 1.0.

В 1.0, легко требовать, чтобы tag элемент имеет один или более детей, не сдерживая детей:

<xs:complexType name="non-empty" mixed="true"> 
    <xs:sequence minOccurs="1" maxOccurs="unbounded"> 
    <xs:any/> 
    </xs:sequence> 
</xs:complexType> 

<xs:element name="tag" type="non-empty"/> 

Это также легко определить, что tag элемент может иметь любой непустой строки (Я отвезу тебя на слове здесь, и позволяя строки, состоящие только из белого пространства - будьте осторожны, что вы просите):

<xs:simpleType name="non-empty"> 
    <xs:restriction base="xs:string"> 
    <xs:minLength value="1"/> 
    </xs:restriction> 
</xs:simpleType> 

<xs:element name="tag" type="non-empty"/> 

Что не возможно в 1.0 есть (а) объявить элемент как имеющие либо простой или совместный mplex, или (b) ограничение текстового содержимого сложного типа со смешанным контентом.

Удачи.

Смежные вопросы