普通文本  |  182行  |  3.91 KB

# ConfigFile as API

The ConfigFile as API is a formal Treble interface describing schemas of
configuration files used across system and vendor partitions.
The Java APIs in the current.txt file are not Java APIs for apps. It's a proxy
for the schema of a xml file used between the system and vendor partition.
The xml files are only ever parsed by apps on the system partition.

## Add Schema
Add the schema (attribute, element or new complexType …) you want to add to the
xsd file.

#### before
```xml
<xs:element name="class">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="student" type="xs:string"/>
    </xs:sequence>
    <xs:attribute name="name" type=”xs:string”/>
  </xs:complexType>
</xs:element>
```

#### after
```xml
<xs:element name="class">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="student" type="xs:string"/>
    </xs:sequence>
    <xs:attribute name="name" type=”xs:string”/>
    <xs:attribute name="number" type="xs:int"/>
  </xs:complexType>
</xs:element>
```

Then run "make {xsd_config module_name} .docs-update-current-api" or "make
update-api" to update all the xsd_config modules.

In the above example, two functions are added as below.
* method public int getNumber();
* method public void setNumber(int);

## Remove Schema
To remove a tag, add an annotation tag with the name of "Deprecated" into the
tag to be deleted. Partners are not allowed to create new vendor images using
deprecated tags

#### before
```xml
<xs:element name="class">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="student" type="xs:string"/>
    </xs:sequence>
    <xs:attribute name="name" type=”xs:string”/>
  </xs:complexType>
</xs:element>
```

#### after
```xml
<xs:element name="class">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="student" type="xs:string">
        <annotation name=”Deprecated”/>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="name" type=”xs:string”/>
  </xs:complexType>
</xs:element>
```

After adding “Deprecated” annotation, we need to update the api or schema just
like when adding a tag. In the above example, a @Deprecate annotation is added.
* method @Deprecated public java.util.List<java.lang.String> getStudent();
After 2 years we can delete the tag. When deleting, delete the tag in the xsd
file and the api in last_current.txt, and update it.

## Release Schema
If there are any changes, we update last_current.txt and last_removed.txt before
release by copying current.txt and removed.txt to last_current.txt and
last_removed.txt.

## Supported/Unsupported Tags
Only the follow tags and attributes are allowed:

#### Supported
```xml
"xsd:schema" [
]

"xsd:element" [
    "xsd:name" {
        values: any valid java name
    }
    "xsd:type" {
        values: built-in data type, simpleType or complexType
    },
    "xsd:ref" {
        values: another element
    },
    "xsd:minOccurs" {
        values: [ 0, maxOccurs ]
    },
    "xsd:maxOccurs" {
        values: [ 1, unbounded ]
    },
]

"xsd:attribute" [
    "xsd:name" {
        values: any valid java name
    }
    "xsd:type" {
        values: built-in data type, simpleType or complexType
    },
    "xsd:ref" {
        values: another element
    },
]

"xsd:complexType" [
    "xsd:name" {
        values: any valid java name
    }
]

"xsd:complexContent" [
]

"xsd:simpleContent" [
]

"xsd:restriction": [
    "xsd:base" {
        values: built-in data type
    }
]

"xsd:extension": [
    "xsd:base" {
        values: built-in data type, simpleType or complexType
    }
]

"xsd:simpleType": [
    "xsd:name" {
        values: any valid java name
    }
]

"xsd:list": [
    "xsd:itemType" {
        values: built-in data type, or simpleType
    }
]

"xsd:union": [
    "xsd:memberTypes" {
        values: built-in data type, or simpleType
    }
]

"xsd:sequence": [
]

"xsd:choice": [
]

"xsd:all": [
]

"xsd:enumeration": [
    "xsd:value" {
        values: built-in data type
    }
]
```