2012-04-04 1 views
0

Будет ли это правильным методом объявления элемента XML Foo, который не может иметь дочерний элемент или другой контент?Синтаксис XSD для объявления элемента, который не может иметь дочерний элемент или другой контент

<xs:element name="Foo" type="xs:string" fixed="" nillable="true" /> 

действительные примеры этого элемента в документе XML будет:

<Foo></Foo> 

и

<Foo/> 

Все остальное будет недействителен, например:

<Foo>stuff</Foo> 

Было бы неплохо, хотя я ВЗ важно, что следующие будут действительны

<Foo> 
</Foo> 

ответ

1

Я объединил несколько вариантов в одну схему и попытался использовать ее для проверки некоторых тестовых элементов.

Источники: http://www.w3schools.com/schema/schema_complex_empty.asp

http://www.herongyang.com/XML-Schema/complexType-Empty-Element-Declaration.html

Зонирование:

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="root"> 
    <xs:complexType> 
     <xs:choice maxOccurs="unbounded"> 
     <xs:element name="foo"> 
      <xs:complexType></xs:complexType> 
     </xs:element> 
     <xs:element name="y1"> 
      <xs:simpleType> 
      <xs:restriction base="xs:string"> 
       <xs:length value="0" /> 
      </xs:restriction> 
      </xs:simpleType> 
     </xs:element> 
     <xs:element name="y2"> 
      <xs:complexType> 
      <xs:complexContent> 
       <xs:restriction base="xs:anyType" /> 
      </xs:complexContent> 
      </xs:complexType> 
     </xs:element> 
     </xs:choice> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

Тестовые случаи:

<?xml version="1.0" encoding="UTF-8"?> 
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:noNamespaceSchemaLocation="NewXMLSchema.xsd"> 
<!-- These six are all valid --> 
    <foo /> 
    <y1 /> 
    <y2 /> 
    <foo></foo> 
    <y1></y1> 
    <y2></y2> 
    <!-- These three are all invalid! --> 
    <foo> 
    </foo> 
    <y1> 
    </y1> 
    <y2> 
    </y2> 
    <!-- These are invalid too. --> 
    <foo>invalid</foo> 
    <y1>invalid</y1> 
    <y2>invalid</y2> 
</root> 

Похоже, любой из трех объявлений элементов будет делать то, что вы хочу, кроме для дополнительной функции пустой строки.

Я бы не включил type = "xs: string", fixed = "" или nillable = "true", потому что все они семантически отличаются от пустого тега. У пустого тега не будет типа (например, строки), потому что он пуст. Он также не имел бы фиксированного значения пустой строки, потому что это отличается от того, чтобы быть пустым. Элемент, который не имеет размера, семантически отличается от пустого тега, потому что он семантически эквивалентен отсутствующему тегу (Источник: XSLT 2.0 и XSLT 2.0 Reference Manager от Michael Kay, стр. 182.). Пустой тег, такой как <br/>, не означает, что в этом случае разрыв строки отсутствует. Это означает, что разрыв строки присутствует, но не имеет содержания или attriubtes.

+0

Спасибо! Теперь я пытаюсь сделать обратное, то есть создать элемент '', который должен содержать строку символов. BTW '' имеет несколько атрибутов. – Olumide

-1
<xs:element name="Foo"> 
    <xs:complexType> 
    <xs:attribute name="Bar" type="xs:positiveInteger"/> 
    </xs:complexType> 
</xs:element> 

Вы можете оставить из атрибута тега, чтобы оставить его полностью пустой ...

+0

Я не уверен, что он применяет критические ограничения. '' не может содержать никаких других элементов или содержимого. – Olumide

0

Есть два подхода к определению типа, который претворяет пустое содержание: одним из них является использование простого типа строки xs: string, которая ограничена с использованием фаз перечисления или шаблона (или с использованием фиксированного) для нулевой длины; другой - использовать сложный тип, определенный как (скажем) пустую последовательность элементов. Для целей валидации между ними не так много выбора; но если вам интересно делать более сложные вещи с помощью вашей схемы, например, определять иерархии типов и группы подстановок или сопоставлять схему с объектной моделью Java, это может изменить ситуацию, которую вы выберете.

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