2010-08-12 4 views
3

У меня есть этот XML-схемыXML атрибут схемы исх

<?xml version="1.0" encoding="UTF-8"?> 
    <xs:schema xmlns="http://hidden/abc" xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://hidden/abc" elementFormDefault="qualified" 
    attributeFormDefault="unqualified" version="1.8"> 

<xs:element name="inv_constraint"> 
     <xs:complexType> 
     <xs:sequence> 
---lots of stuff--- 
     </xs:sequence> 
     <xs:attribute name="unaryOperator"> 
     <xs:annotation> 
     <xs:documentation>Negate an entire expression.</xs:documentation> 
     </xs:annotation> 
     <xs:simpleType> 
     <xs:restriction base="xs:string"> 
      <xs:enumeration value="not"></xs:enumeration> 
      <xs:enumeration value="-"></xs:enumeration> 
     </xs:restriction> 
     </xs:simpleType> 
     </xs:attribute> 
     </xs:complexType> 
    </xs:element> 

, а затем этот XML-файл, который использует его:

<?xml version="1.0" encoding="UTF-8"?> 
<OCL xmlns="http://hidden/abc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://hidden/abc abc.XSD"> 
------ lots of stuff 
    <inv_constraint unaryOperator="not"> 
       <property src="A1" ref="PR1"/> 
       <matOperation operator="ge"> 
        <value>0</value> 
       </matOperation> 
      </inv_constraint> 

если я изменить схему XML, чтобы использовать атрибут с реф = «» как это:

... 
<xs:attribute ref="unaryOperator"></xs:attribute> 
    </xs:complexType> 
</xs:element> 


<xs:attribute name="unaryOperator"> 
<xs:annotation> 
    <xs:documentation>Negate an entire expression.</xs:documentation> 
</xs:annotation> 
<xs:simpleType> 
    <xs:restriction base="xs:string"> 
    <xs:enumeration value="not"></xs:enumeration> 
    <xs:enumeration value="-"></xs:enumeration> 
    </xs:restriction> 
</xs:simpleType> 

тогда мой XML становится:

<inv_constraint xmlns:ns1="http://hidden/abc" ns1:unaryOperator="not"> 

, но я хочу использовать реф и у меня есть XML, как

<inv_constraint unaryOperator="not"> 

Как я могу это сделать? спасибо

ответ

2

В XML-схемах должны быть определены все глобальные атрибуты элементов, атрибутов или типов. Таким образом, все глобально определенные атрибуты будут иметь префикс пространства имен, даже если вы определили атрибутFormDefault как «неквалифицированный». Обходным путем является определение этого атрибута внутри группы атрибутов или глобального типа, а затем вы можете ссылаться на эту именованную группу или расширять этот именованный тип.

<xs:attributeGroup name="unaryGroup"> 
    <xs:attribute name="unaryOperator"> 
     <xs:annotation> 
      <xs:documentation>Negate an entire expression.</xs:documentation> 
     </xs:annotation> 
     <xs:simpleType> 
      <xs:restriction base="xs:string"> 
       <xs:enumeration value="not"></xs:enumeration> 
       <xs:enumeration value="-"></xs:enumeration> 
      </xs:restriction> 
     </xs:simpleType> 
    </xs:attribute> 
</xs:attributeGroup> 

Если вам нужен этот атрибут, обратитесь к атрибутуGroup вместо атрибута. Группа атрибутов не должна содержать все атрибуты, используемые элементом, это также должно быть:

<xs:complexType name="UnaryType"> 
    <xs:attributeGroup ref="unaryGroup"/> 
    <xs:attribute name="otherAttribute" type="xs:string"/> 
</xs:complexType> 
Смежные вопросы