2014-02-12 1 views
0

Мне нужно повторно использовать тег состояния, который я создал в XSD. Например, в нашем заказе у нас есть несколько статусов. Состояние заказа на заказ, заказ грузового автомобиля и т. Д.Как ссылаться на элемент in и XSD и дать ему новое имя?

К сожалению, теги, которые необходимо использовать, к сожалению, не совпадают. Для автомобиля это carStatus, и для грузовика это truckStatus, но основной объект тот же. Это тег xs: string, который имеет перечисление COMPLETED, BUSY или AWAITING INFORMATION.

Теперь я не хочу иметь 16 тегов для 16 объектов (автомобиль, дорожка, чоппер ... -Status). Завтра, если мы добавим еще один статус, я должен перейти ко всем этим элементам и обновить его.

Мой XSD, где я ссылаться на GenericCodeStatus выглядит следующим образом

<xs:schema targetNamespace="http://www.myDomain.co.za/myCoreXsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:mine="http://www.myDomain.co.za/myCoreXsd" elementFormDefault="qualified" attributeFormDefault="unqualified"> 
     <!-- Defining my Enum --> 
<xs:element name="GenericCodeStatus"> 
    <xs:annotation> 
     <xs:documentation>Generic code status</xs:documentation> 
    </xs:annotation> 
    <xs:simpleType> 
     <xs:restriction base="xs:string"> 
      <xs:enumeration value="COMPLETED"/> 
      <xs:enumeration value="BUSY"/> 
      <xs:enumeration value="AWAITING INFORMATION"/> 
     </xs:restriction> 
    </xs:simpleType> 
</xs:element> 

     <!-- Here I have mytag where I am referencing the genericCodeStatus --> 
<xs:complexType name="MyTag1"> 
    <xs:sequence> 
     <xs:element ref="mine:GenericCodeStatus"/> 
    </xs:sequence> 
</xs:complexType> 

Теперь дело в том, что я хочу иметь genericCodeStatus под MyTag1 иметь имя. Я пытался создать его с именем и типом тега (и я использую XML Spy в качестве редактора)

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema targetNamespace="http://www.myDomain.co.za/myCoreXsd" xmlns:mine="http://www.myDomain.co.za/myCoreXsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" elementFormDefault="qualified" attributeFormDefault="unqualified"> 
<!-- Defining my Enum --> 
<xs:element name="GenericCodeStatus"> 
    <xs:annotation> 
     <xs:documentation>Generic code status</xs:documentation> 
    </xs:annotation> 
    <xs:simpleType> 
     <xs:restriction base="xs:string"> 
      <xs:enumeration value="COMPLETED"/> 
      <xs:enumeration value="BUSY"/> 
      <xs:enumeration value="AWAITING INFORMATION"/> 
     </xs:restriction> 
    </xs:simpleType> 
</xs:element> 
<xs:complexType name="MyTag1"> 
    <xs:sequence> 
     <!-- Taken this out --> 
     <xs:element ref="mine:GenericCodeStatus"/> 
     <!-- and replace it with name and type --> 
     <xs:element name="carStatus" type="mine:GenericCodeStatus"/> 
    </xs:sequence> 
</xs:complexType> 

Но тогда получите ошибку неопределенного значения для «типа» произошла ошибка. Я также попытался удалить пространство имен «мое».

Если я пытаюсь заменить тип с реф как в

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema targetNamespace="http://www.myDomain.co.za/myCoreXsd" xmlns:mine="http://www.myDomain.co.za/myCoreXsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" elementFormDefault="qualified" attributeFormDefault="unqualified"> 
<!-- Defining my Enum --> 
<xs:element name="GenericCodeStatus"> 
    <xs:annotation> 
     <xs:documentation>Generic code status</xs:documentation> 
    </xs:annotation> 
    <xs:simpleType> 
     <xs:restriction base="xs:string"> 
      <xs:enumeration value="COMPLETED"/> 
      <xs:enumeration value="BUSY"/> 
      <xs:enumeration value="AWAITING INFORMATION"/> 
     </xs:restriction> 
    </xs:simpleType> 
</xs:element> 
<xs:complexType name="MyTag1"> 
    <xs:sequence> 
     <!-- Taken this out --> 
     <xs:element ref="mine:GenericCodeStatus"/> 
     <!-- and replace it with name and ref --> 
     <xs:element name="carStatus" ref="GenericCodeStatus"/> 
    </xs:sequence> 
</xs:complexType> 

Проверка отлично работает, но если я сохранить это XML Spy является удаление элемента имя и я вернулся туда, где я начал.

Если кто-нибудь знает пожалуйста?

ответ

1

Я нашел ответ на этот вопрос, но думал о том, чтобы все еще опубликовать это, поскольку его было трудно найти. Спасибо моему приятелю :)

Я не должен определять Элемент, как я, а затем пытаюсь ссылаться на него каждый раз с новым именем.

Что я должен сделать, так это определить простой тип и дать ему имя.

<!-- Define the simpleType as an enum and give it a name --> 
<xs:simpleType name="myCoolDataType"> 
    <xs:restriction base="xs:string"> 
     <xs:enumeration value="COMPLETED"/> 
     <xs:enumeration value="BUSY"/> 
     <xs:enumeration value="AWAITING INFORMATION"/> 
    </xs:restriction> 
</xs:simpleType> 

Тогда где я хочу использовать его мне нужно определить элемент и просто дать ему тип со значением, которое вы дали перечисления в первом Штипе

<xs:complexType name="MyTag1"> 
    <xs:sequence> 
     <xs:element name="truckStatus" type="mine:myCoolDataType"/> 
     <xs:element name="carStatus" type="mine:myCoolDataType"/> 
    </xs:sequence> 
</xs:complexType> 
Смежные вопросы