2014-12-19 2 views
0

Я изучаю, как создавать документы xml/xsd, и я застрял сейчас. я не знаю, как соединить эти ограничения в одном компоненте:XML-схема - ограничения и атрибуты в одном компоненте

<xsd:simpleType name="unitType"> 
    <xsd:restriction base="xsd:string"> 
     <xsd:enumeration value="g"/> 
     <xsd:enumeration value="Gigabyte"/> 
     <xsd:enumeration value="mAh"/> 
     <xsd:enumeration value="Year"/> 
    </xsd:restriction> 
</xsd:simpleType> 

<xsd:simpleType name="ProducedContent"> 
    <xsd:restriction base="xsd:integer"> 
     <xsd:minInclusive value="1970"/> 
     <xsd:maxInclusive value="2015"/> 
    </xsd:restriction> 
</xsd:simpleType> 


<xsd:complexType name="ProducedContent"> 
    <xsd:simpleContent> 
     <xsd:extension base="xsd:string"> 
      <xsd:attribute name="unit" type="unitType" use="required"/> 
     </xsd:extension> 
    </xsd:simpleContent> 
</xsd:complexType> 

Я знаю, что это не будет работать, но я должен установить вышеуказанные ограничения на этот элемент:

<Produced unit="Year">2014</Produced> 
+0

У вас, кажется, два сложных типа под названием «ProducedContent»? –

+0

Нет, я просто хочу установить ограничения на элемент «Произведен». Должен быть атрибут «единица» с перечислением Год или что-то еще. Также текст в этом элементе должен быть числом с 1970 по 2015 год. – matpal

+0

@RowlandShaw, один простой и другой комплекс. Понятно, что у него не все правильно определено и связано правильно, но здесь достаточно, чтобы посмотреть, что он пытается сделать. См. [Мой ответ ниже] (http://stackoverflow.com/a/27567713/290085). – kjhughes

ответ

1

ограничения, вы запрашиваете на этом примере XML:

<Produced unit="Year">2014</Produced> 

будет исполнено этим XSD:

<?xml version="1.0" encoding="UTF-8"?> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
      version="1.0"> 

    <xsd:element name="Produced"> 
    <xsd:complexType> 
     <xsd:simpleContent> 
     <xsd:extension base="ProducedContent"> 
      <xsd:attribute name="unit" type="unitType"/> 
     </xsd:extension> 
     </xsd:simpleContent> 
    </xsd:complexType> 
    </xsd:element> 

    <xsd:simpleType name="unitType"> 
    <xsd:restriction base="xsd:string"> 
     <xsd:enumeration value="g"/> 
     <xsd:enumeration value="Gigabyte"/> 
     <xsd:enumeration value="mAh"/> 
     <xsd:enumeration value="Year"/> 
    </xsd:restriction> 
    </xsd:simpleType> 

    <xsd:simpleType name="ProducedContent"> 
    <xsd:restriction base="xsd:integer"> 
     <xsd:minInclusive value="1970"/> 
     <xsd:maxInclusive value="2015"/> 
    </xsd:restriction> 
    </xsd:simpleType> 

</xsd:schema>