атрибут XML-схемы ref - PullRequest
       7

атрибут XML-схемы ref

3 голосов
/ 12 августа 2010

у меня есть эта 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 для использования атрибута с ref = "" следующим образом:

...
<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">

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

1 Ответ

2 голосов
/ 21 августа 2010

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

<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>

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

<xs:complexType name="UnaryType">
  <xs:attributeGroup ref="unaryGroup"/>
  <xs:attribute name="otherAttribute" type="xs:string"/>
</xs:complexType>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...