2012-05-28 1 views
0

Это (часть) XML, который я хочу определить в моей схеме. Я уже добавил уникальное ограничение для атрибута name элемента <add />.Могу ли я потребовать, чтобы атрибут XML имел значение?

<parameters> 
    <add name="one" value="1" /> 
    <add name="two" value="2" /> 
</parameters> 

Но я не знаю, как предотвратить <add name="" value="" />. Я попытался следующая схема, но это не соблюдается:

<xs:attribute name="name" use="required" type="config:NonEmptyString" /> 

<xs:simpleType name="NonEmptyString"> 
    <xs:restriction base="xs:string"> 
    <xs:minLength value="1" /> 
    </xs:restriction> 
</xs:simpleType> 

config является целевым пространством имен для схемы.

Редактировать: Я использую Visual Studio для проверки XML, когда я пишу его в редакторе XML.

ответ

1

Visual Studio 2010 делает проверку правильно - он выдает предупреждение:

Warning 4 The 'name' attribute is invalid - The value '' is invalid according to its datatype 'config:NonEmptyString' - The actual length is less than the MinLength value. XMLFile1.xml 3 14 Miscellaneous Files 

, но по какой-то причине (ошибка?) Не подчеркнуть позицию ошибки в редакторе XML.

+0

Действительно, вы правы, я должен был взглянуть на фактическое окно списка ошибок с помощью Warnings on. –

2

Я сделал быструю проверку; создал XSD из XML и добавил ограничение:

<?xml version="1.0" encoding="utf-8"?> 
<!--XML Schema generated by QTAssistant/XML Schema Refactoring (XSR) Module (http://www.paschidev.com)--> 
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <xsd:element name="parameters"> 
     <xsd:complexType> 
      <xsd:sequence> 
       <xsd:element maxOccurs="unbounded" name="add"> 
        <xsd:complexType> 
         <xsd:attribute name="name" type="NonEmptyString" use="required"/> 
         <xsd:attribute name="value" type="xsd:unsignedByte" use="required"/> 
        </xsd:complexType> 
       </xsd:element> 
      </xsd:sequence> 
     </xsd:complexType> 
    </xsd:element> 
    <xsd:simpleType name="NonEmptyString"> 
     <xsd:restriction base="xsd:string"> 
      <xsd:minLength value="1"/> 
     </xsd:restriction> 
    </xsd:simpleType> 
</xsd:schema> 

Я проверенный эту XML:

<parameters> 
    <add name="" value="1" /> 
    <add name="two" value="2" /> 
</parameters> 

И я получил эту ошибку:

Error occurred while loading [], line 2 position 8 
The 'name' attribute is invalid - The value '' is invalid according to its datatype 'NonEmptyString' - The actual length is less than the MinLength value. 

Я бы скажем, что проблема скорее связана с вашим XSD-процессором, а не с самим XSD. Может быть, вы могли бы обновить сообщение с помощью процессора, который используете?

+0

ОК, благодарю вас за этот совет. Какой процессор вы использовали? –

+0

Шахта основана на .NET. –