# 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 } ] ```