2012-07-04 2 views
0

Мое требование, как, Рассмотрим пример XMLXSD - проверка

<user key="username" value="Test"/> 
<user key="age" value="27"/> 
<user key="email" value="[email protected]"/> 

В этом случае все элемент, имеющий такое же имя, такое же количество атрибутов и те же имена атрибутов тоже ..

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

Есть ли способ достичь этого.

ответ

0

XSD не поддерживает эту условную проверку. Вам нужно использовать Schematron.

1

Вы можете перевести ваши данные XML с помощью XSL преобразование в форму, которая может быть проверена с помощью схемы XSD. Это не требует специальных специальных инструментов.

Ваш входные данные:

<?xml version="1.0" encoding="UTF-8"?> 
<users> 
    <user key="username" value="Test"/> 
    <user key="age" value="27"/> 
    <user key="email" value="[email protected]"/> 
</users> 

Может быть переведен с помощью следующего преобразования:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
    <xsl:template match="/users"> 
     <users> 
      <xsl:apply-templates/> 
     </users> 
    </xsl:template> 
    <xsl:template match="//user"> 
     <xsl:variable name="key" select="@key"/> 
     <xsl:variable name="value" select="@value"/> 
     <xsl:element name="{$key}"> 
      <xsl:value-of select="$value"/> 
     </xsl:element> 
    </xsl:template> 
</xsl:stylesheet> 

в следующем виде:

<?xml version="1.0" encoding="UTF-8"?> 
<users> 
    <username>Test</username> 
    <age>27</age> 
    <email>[email protected]</email> 
</users> 

И это может быть легко проверены с стандартная схема XSD:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> 
    <xs:element name="users"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="username" type="xs:string"/> 
       <xs:element name="age" type="xs:positiveInteger"/> 
       <xs:element name="email"> 
        <xs:simpleType> 
         <xs:restriction base="xs:string"> 
          <xs:pattern value="[email protected]+\.[^.]+"/> 
         </xs:restriction> 
        </xs:simpleType> 
       </xs:element> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema>