2012-02-07 2 views
3

Я хотел бы определить схему, содержащую элементы, определяющие тип схемы XML. Этот вопрос может быть связан с XML Schema for schemas и этим question.XML-схема: определение типов типов

Вот что я до сих пор:

<xs:complexType name="metatype"> 
    <xs:sequence> 
     <xs:element name="datatype" type="datatype" minOccurs="0" maxOccurs="1"/> 
     <xs:element name="location" type="locationtype" minOccurs="0"maxOccurs="unbounded"/> 
     <xs:element name="alias" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> 
    </xs:sequence> 
    <xs:attribute name="id" type="xs:ID" use="required"/> 
    <xs:attribute name="editable" type="xs:boolean" default="false" use="optional"/> 
    <xs:attribute name="forcedvisible" type="xs:boolean" default="false" use="optional"/> 
</xs:complexType> 

, где тип данных:

<xs:complexType name="datatype"> 
    <xs:sequence> 
     <xs:element name="restriction"> 
     <xs:complexType> 
      <xs:sequence> 
      <xs:element name="enumeration"> 
       <xs:complexType> 
       <xs:attribute name="value" type="xs:string" use="required"/> 
       </xs:complexType> 
      </xs:element> 
      </xs:sequence> 
      <xs:attribute name="base" type="xs:string" use="required"/> 
      <!-- type xs:string is not accurate for XML Schema type --> 
     </xs:complexType> 
     </xs:element> 
    </xs:sequence> 
</xs:complexType> 

Вместо того, чтобы объявить тип данных, я хотел бы использовать localSimpleType в Schema for schemas или, по крайней мере, simpleRestrictionType но мой редактор XML Schema (Visual Studio), похоже, не распознает эти типы. Есть ли еще документ XML Schema, который мне нужно использовать? Мне бы очень хотелось избежать определения всего элемента XML Schema simpleType и его подтекстов для ограничений и т. Д.

ответ

1

Я думаю, вы должны иметь возможность написать схему, которая импортирует S4S и типы ссылок, определенные в нем. Однако вполне возможно, что некоторые инструменты будут возражать.

Одна вещь, которую вы не должны делать, это попытаться обработать модифицированный S4S или добавить дополнительные компоненты в пространство имен XSD. Инструменты, ориентированные на схему, имеют право рассматривать все в S4S как аксиоматические и представлять их с определениями, которые отличаются от их встроенного знания этих компонентов, могут привести к неописуемому хаосу.

1

Вы хотите использовать xsd или придумать свой собственный и написать собственный собственный парсер?

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

Местные ограничения лучше всего подходят для одного офф, если вы используете его несколько раз, определить новый тип для DRY (выигрыш повторяйтесь)

например

<xs:simpleType name="mySimpleTypeA"> 
    <xs:restriction base = "xs:string"> 
    <xs:enumeration value ="on"/> 
    <xs:enumeration value = "off"/> 
    </xs:restriction> 
</xs:simpleType> 

и

<xs:complexType name="myComplexTypeA> 
    <xs:sequence> 
    <xs:element name="someElementName"> 
     <xs:simpleType> 
     <xs:restriction base ="xs:string"> 
      <xs:minLength ="8"/> 
     </xs:restriction> 
     </xs:simpleType> 
    </xs:element> 
    </xs:sequence> 
    <xs:attribute name="someAttributeName" use="required" type="mySimpleTypeA"/> 
</xs:complexType> 

Затем вы можете использовать их как в

<xs:element name = "Fred" type ="myComplexTypeA"/> 

звонит ограничение элемент, не собирается делать это один ...

О от верхней части головы, это не подтвердило его, но оно должно быть близко.

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